【问题标题】:What is the fastest way of getting a file length in .net?在.net中获取文件长度的最快方法是什么?
【发布时间】:2010-09-23 02:49:20
【问题描述】:

在 .net 中获取文件长度的最快方法是什么?

注意:我正在通过网络共享访问文件。

目前为止

  • 1.5ms 文件信息长度
  • .5ms FileStream().Length

【问题讨论】:

  • 出于好奇,FileInfo 有什么问题?
  • 是的,如果您解释为什么不能使用 FileInfo,人们更有可能给出您正在寻找的答案
  • @Scott @Luxspes 我已经重新措辞了这个问题以代表我的真实意图。
  • 他们的问题仍然适用。 FileInfo.Length 对你来说真的不够快吗?
  • @notjim 在我的测试中。访问网络上的文件。 FileInfo.Length 为 1.5 毫秒。 new FileStream().Length 为 0.5 毫秒。因此,当访问大量文件时会产生相当大的差异

标签: .net file file-io fileinfo


【解决方案1】:

源自 Adi_aks 答案

public static long GetFileLength(string path)
{
    using (var fileStream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read))
    {
        return fileStream.Length;
    }
}

【讨论】:

  • 我添加了一个Catch ex As Exception Return -1 End Try End Function(哎呀...我的 VB 正在显示..)到一些我用来做尾巴的代码。就像一个魅力,看起来比使用 FileInfo 对象更精简。
【解决方案2】:
long size = File.OpenRead(path).Length;

【讨论】:

  • Server.MapPath() 仅适用于 ASP.NET,我不确定查找文件大小的最快方法是否会涉及不必要地在其上打开流(顺便说一句,这不是也被此代码关闭)
  • 最好还是使用 (var fileStream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read)) { var length = fileStream.Length; }
【解决方案3】:

您可以 PInvoke FindFirstFile 或 GetFileAttributesEx API 调用,但这似乎是 FileInfo 类已经为您完成的大量额外工作。否则我想知道 Scott 的想法是一样的:你为什么不想使用 FileInfo?

【讨论】:

    【解决方案4】:

    为什么不直接使用FileInfo.Length

    如果您真的愿意,可以 p/调用 Win32 API:CreateFile、GetFileSizeEx 和 CloseHandle。

    【讨论】:

    • 我已经重新措辞了这个问题以代表我的真实意图。
    猜你喜欢
    • 1970-01-01
    • 2012-02-29
    • 2013-10-24
    • 1970-01-01
    • 2013-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-08
    相关资源
    最近更新 更多