文件为空检查

Arc*_*ian 46 c#

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

我需要这样的东西:

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

else
{
    // do other stuff
}
Run Code Online (Sandbox Code Playgroud)

tan*_*ius 103

使用FileInfo.Length:

if( new FileInfo( "file" ).Length == 0 )
{
  // empty
}
Run Code Online (Sandbox Code Playgroud)

检查Exists属性以查找文件是否存在.

  • 注意:`new FileInfo("file")..length`如果文件不存在则抛出`FileNotFoundException`,所以如果有文件不存在的情况,请务必在检查之前检查`Exists`属性. Length`. (3认同)

TDa*_*Dao 13

FileInfo.Length并非在所有情况下都有效,尤其是对于文本文件。如果你有一个文本文件,它曾经有一些内容,现在被清除了,长度可能仍然不是 0,因为字节顺序标记可能仍然保留。

您可以通过创建一个文本文件、向其中添加一些 Unicode 文本、保存它,然后清除文本并再次保存该文件来重现该问题。

现在FileInfo.Length将显示不为零的大小。

对此的解决方案是检查 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;
}
Run Code Online (Sandbox Code Playgroud)

  • 惊讶地发现没有人关注这个答案,它提供了有关“FileInfo.Length”属性的缺点的急需的有价值的信息,也是检查文件是否真正为空的好方法。+1。 (4认同)

Joe*_*orn 10

这里的问题是文件系统是易失性的.考虑:

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
{


}
Run Code Online (Sandbox Code Playgroud)

这可以而且确实发生了. 通常,处理file-io场景所需的方法是重新考虑使用异常块的过程,然后将开发时间用于编写良好的异常处理程序.

  • 对于OP的计划,这些问题可能不是一个问题."完美是善的敌人." (4认同)

Mik*_*ike 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;
} 
Run Code Online (Sandbox Code Playgroud)

  • 由于您在第一个区块中返回,因此您可以完全跳过else区块.或者,您可以合并到`else if if. (4认同)

小智 6

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