文件是空的检查

我如何检查C#文件是否为空?

需要这样的东西:

if (file is empty) { //do stuff } else { //do other stuff } 

使用FileInfo.Length :

 if( new FileInfo( "file" ).Length == 0 ) { // empty } 

如果文件存在,检查Exists属性找出。

这里的问题是文件系统是不稳定的。 考虑:

 if (new FileInfo(name).Length > 0) { //another process or the user changes or even deletes the file right here // More code that assumes and existing, empty file } else { } 

这可以发生。 通常,处理file-io场景的方式是重新考虑使用exception块的过程,然后将开发时间写入良好的exception处理程序。

  if (!File.Exists(FILE_NAME)) { Console.WriteLine("{0} does not exist.", FILE_NAME); return; } else { if (new FileInfo(FILE_NAME).Length == 0) { Console.WriteLine("{0} is empty", FILE_NAME); return; } } 

我发现检查FileInfo.Length字段并不总是适用于某些文件。 例如,空.pkgdef文件的长度为3.因此,我必须实际读取文件的所有内容,并返回是否等于空string。

除了@tanascius的回答,你可以使用

 try { if (new FileInfo("your.file").Length == 0) { //Write into file, i guess } } catch (FileNotFoundException e) { //Do anything with exception } 

它只会在文件存在的情况下才能做到,在catch语句中你可以创build文件,然后运行代码agin。

这就是我解决问题的方法。 它会检查文件是否存在,然后检查长度。 我认为一个不存在的文件是有效的空。

 var info = new FileInfo(filename); if ((!info.Exists) || info.Length == 0) { // file is empty or non-existant } 

如果文件包含空间呢? FileInfo("file").Length等于2。
但我认为这个文件也是空的(没有任何内容,除了空格(或换行符))。

我用过这样的东西,但有没有人有更好的主意?
可能有助于某人。

 string file = "file.csv"; var fi = new FileInfo(file); if (fi.Length == 0 || (fi.Length < 100000 && !File.ReadAllLines(file) .Where(l => !String.IsNullOrEmpty(l.Trim())).Any())) { //empty file } 
  //You can use this function, if your file exists as content, and is always copied to your debug/release directory. /// <summary> /// Include a '/' before your filename, and ensure you include the file extension, ex. "/myFile.txt" /// </summary> /// <param name="filename"></param> /// <returns>True if it is empty, false if it is not empty</returns> private Boolean CheckIfFileIsEmpty(string filename) { var fileToTest = new FileInfo(Environment.CurrentDirectory + filename); return fileToTest.Length == 0; }