首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不使用System.IO.FileInfo获取文件大小?

不使用System.IO.FileInfo获取文件大小?
EN

Stack Overflow用户
提问于 2013-01-18 21:29:44
回答 6查看 24.2K关注 0票数 14

在不使用的情况下,可以在C#中获得文件的C#大小吗?

我知道,通过分别使用Path.GetFileName(yourFilePath)Path.GetExtension(yourFilePath)可以获得其他东西,比如名称和扩展名,但显然不是文件大小?有其他方法可以不使用获得文件大小System.IO.FileInfo吗?

唯一的原因是,如果我是正确的,FileInfo会获取比我真正需要的更多的信息,因此,如果我只需要文件的大小,就需要更长的时间来收集所有的FileInfo。有更快的路吗?

EN

回答 6

Stack Overflow用户

发布于 2013-01-18 22:41:47

我使用以下两种方法执行了基准测试:

代码语言:javascript
复制
    public static uint GetFileSizeA(string filename)
    {
        WIN32_FIND_DATA findData;
        FindFirstFile(filename, out findData);
        return findData.nFileSizeLow;
    }

    public static uint GetFileSizeB(string filename)
    {
        IntPtr handle = CreateFile(
            filename,
            FileAccess.Read,
            FileShare.Read,
            IntPtr.Zero,
            FileMode.Open,
            FileAttributes.ReadOnly,
            IntPtr.Zero);
        long fileSize;
        GetFileSizeEx(handle, out fileSize);
        CloseHandle(handle);
        return (uint) fileSize;
    }

GetFileSizeA针对2300多个文件运行,运行时间为62-63ms。GetFileSizeB花了超过18秒。

除非有人看到我做错了什么,我认为答案是清楚的,哪种方法更快。

有什么办法可以不让我真正打开文件吗?

更新

将FileAttributes.ReadOnly更改为FileAttributes.Normal缩短了时间,使这两种方法的性能相同。

此外,如果您跳过CloseHandle()调用,GetFileSizeEx方法的速度将提高20%-30%,不过我不知道我会建议这样做。

票数 9
EN

Stack Overflow用户

发布于 2013-12-19 09:19:48

通过一个简短的测试,我发现使用FileStream比使用Pete的GetFileSizeB平均要慢1毫秒(我在网络共享上花费了21毫秒.)。就我个人而言,我更喜欢在任何可能的时候都呆在BCL限制之内。

代码很简单:

代码语言:javascript
复制
using (var file = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
    return file.Length;
}
票数 5
EN

Stack Overflow用户

发布于 2013-01-18 22:16:04

根据这句话

我有一个小应用程序可以收集大小信息并保存到一个数组中.但是我通常有五十万个文件,不管是给还是取,这需要一段时间来浏览所有这些文件(我正在使用FileInfo)。我只是想知道有没有更快的方法..。

由于您正在查找这么多文件的长度,所以您更有可能从并行化中受益,而不是试图通过另一种方法获取文件大小。FileInfo类应该足够好,而且任何改进都可能很小。

另一方面,并行化文件大小请求有可能大大提高速度。(请注意,改进的程度主要取决于您的磁盘驱动器,而不是您的处理器,因此结果可能会有很大差异。)

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

https://stackoverflow.com/questions/14407954

复制
相关文章

相似问题

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