如何在C#中检查文件是否为空?
我需要类似的东西:
if (file is empty)
{
// do stuff
}
else
{
// do other stuff
}
答案 0 :(得分:99)
答案 1 :(得分:9)
这里的问题是文件系统是易失性的。考虑:
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场景所需的方法是重新考虑使用异常块的过程,然后将开发时间写入编写良好的异常处理程序。
答案 2 :(得分:6)
if (!File.Exists(FILE_NAME))
{
Console.WriteLine("{0} does not exist.", FILE_NAME);
return;
}
if (new FileInfo(FILE_NAME).Length == 0)
{
Console.WriteLine("{0} is empty", FILE_NAME);
return;
}
答案 3 :(得分:3)
我发现检查FileInfo.Length字段并不总是适用于某些文件。例如,空的.pkgdef文件的长度为3.因此,我必须实际读取文件的所有内容并返回是否等于空字符串。
答案 4 :(得分:2)
除了回答@tanascius之外,您还可以使用
try
{
if (new FileInfo("your.file").Length == 0)
{
//Write into file, i guess
}
}
catch (FileNotFoundException e)
{
//Do anything with exception
}
只有当文件存在时才会这样做,在catch语句中你可以创建文件,然后运行代码agin。
答案 5 :(得分:2)
如果文件包含空格怎么办? 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
}
答案 6 :(得分:1)
这就是我解决问题的方法。它将首先检查文件是否存在,然后检查长度。我认为一个不存在的文件实际上是空的。
var info = new FileInfo(filename);
if ((!info.Exists) || info.Length == 0)
{
// file is empty or non-existant
}
答案 7 :(得分:0)
如果您的文件存在并且始终复制到调试/发布目录,则可以使用此功能。
/// <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;
}
答案 8 :(得分:0)
FileInfo.Length 并非在所有情况下都有效,尤其是对于文本文件。如果您有一个以前具有某些内容的文本文件,现在已清除,则该长度可能仍然不是0,因为字节顺序标记可能仍然保留。
您可以通过以下方式重现该问题:创建一个文本文件,向其中添加一些Unicode文本,保存它,然后清除该文本并再次保存该文件。
现在 FileInfo.Length 将显示不为零的大小。
一个解决方案是根据byte order mark的最大大小来检查Length <6。如果您的文件可以容纳一个字节或几个字节,那么如果Length <6,则对文件进行读取,并检查读取大小== 0。
public static bool IsTextFileEmpty(string fileName)
{
var info = new FileInfo(fileName);
if (info.Length == 0)
return true;
// only if your use case can involve files with 1 or a few bytes of content.
if (info.Length < 6)
{
var content = File.ReadAllText(fileName);
return content.Length == 0;
}
return false;
}