首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >读取文件长度C#的最快方法

读取文件长度C#的最快方法
EN

Stack Overflow用户
提问于 2012-02-07 23:11:37
回答 2查看 19K关注 0票数 28

我使用的是fs.Length,其中fs是一个FileStream

这是一个O(1)操作吗?我认为这将只是从文件的属性中读取,而不是通过文件来查找何时查找位置已到达末尾。我尝试查找的文件长度可以轻松地从1MB到4-5 GB。

但是我注意到有一个FileInfo类,它也有一个Length属性。

从理论上讲,这两个Length属性是否需要相同的时间?或者是因为必须先打开FileStream,所以fs.Length变慢了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-07 23:17:37

.NET中获取文件大小的自然方法是您提到的FileInfo.Length属性。

我不确定Stream.Length是否更慢(它无论如何都不会读取整个文件),但如果您不打算读取文件,使用FileInfo而不是FileStream肯定会更自然。

下面是一个小的基准测试,它将提供一些数值:

代码语言:javascript
复制
private static void Main(string[] args)
{
    string filePath = ...;   // Path to 2.5 GB file here

    Stopwatch z1 = new Stopwatch();
    Stopwatch z2 = new Stopwatch();

    int count = 10000;

    z1.Start();
    for (int i = 0; i < count; i++)
    {
        long length;
        using (Stream stream = new FileStream(filePath, FileMode.Open))
        {
            length = stream.Length;
        }
    }

    z1.Stop();

    z2.Start();
    for (int i = 0; i < count; i++)
    {
        long length = new FileInfo(filePath).Length;
    }

    z2.Stop();

    Console.WriteLine(string.Format("Stream: {0}", z1.ElapsedMilliseconds));
    Console.WriteLine(string.Format("FileInfo: {0}", z2.ElapsedMilliseconds));

    Console.ReadKey();
}

结果

代码语言:javascript
复制
Stream: 886
FileInfo: 727
票数 40
EN

Stack Overflow用户

发布于 2012-02-07 23:15:18

两者都将访问文件系统元数据,而不是读取整个文件。我不知道哪个更有效,作为一个经验法则,我会说,如果你只想知道长度(和其他元数据),使用FileInfo -而如果你无论如何都是以流的形式打开文件,使用FileStream.Length

票数 34
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9178681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档