文件是空的检查
我如何检查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; }