如何高效检索文件名和长度列表

问题描述 投票:0回答:1

我有一个 C# 应用程序,它有时会扫描一个可能包含数十个或数千个文件的文件夹。它是按名称和长度列出的过滤器,并选择相对较小的数字进行处理。

简化代码:

DirectoryInfo directoryInfo = new DirectoryInfo(path);
FileSystemInfo[] fileSystemInfos = directoryInfo.GetFileSystemInfos();
List<MyInfo> myInfoList = fileSystemInfos
    .Where(f => (f.Attributes & FileAttributes.Directory) != FileAttributes.Directory))
    .Select(f => new MyInfo {
        FilePath = f.FullName,
        FileSize = new FileInfo(f.FullName).Length,
        })
    .ToList();

逻辑随后选择一些文件并验证非零长度。

问题是对

FileInfo(f.FullName).Length
的单独调用会影响性能。在幕后,我看到 FileInfo 内部存储了一个 WIN32_FILE_ATTRIBUTE_DATA 结构,其中包含长度(fileSizeLow 和 fileSizeHigh),但不会将其公开为属性。

问题:是否有一种简单替代上述方法,可以有效地检索文件名长度,而无需额外的 FileInfo.Length 调用?

我的替代方案是使 MyInfo.FileSize 属性成为延迟加载属性,但我想首先检查是否有更直接的方法。

c# directoryinfo filesysteminfo
1个回答
0
投票

(评论回复)

不调用 GetFileSystemInfos 就不能直接调用 GetFiles 吗? GetFiles 返回具有 Length 属性的 FileInfo 对象。这样做还意味着您不必手动清除目录条目,因为只会返回文件。

© www.soinside.com 2019 - 2024. All rights reserved.