gpt4 book ai didi

c# - 快速 I/O 检查目录是否包含文件

转载 作者:行者123 更新时间:2023-11-30 19:25:03 24 4
gpt4 key购买 nike

我正在使用 .NET 4 编写 C# 应用程序以从目录列表中读取和处理数据文件 (*.dat)。

目前,我正在使用以下函数检查目录是否包含文件:

    private bool FilesPresent()
{
string[] DIRS = Directory.GetDirectories(dataFileDirectoryPath, "*.*", SearchOption.TopDirectoryOnly);
foreach (string d in DIRS)
{
string[] FILES = Directory.GetFiles(d, "*.*", SearchOption.AllDirectories);
if (FILES.Length > 0) { return true; }
}
return false;
}

我还尝试了以下帖子中的一些替代解决方案:How to quickly check if folder is empty (.NET)?

重要的是要注意一些目录有超过 1,000,000 个文件。即使将数百万以上的文件名读入字符串[] 也需要很长时间。

我怎样才能以不同的方式实现它以使其运行得更快?

简单来说;我只想知道检查目录是否为空的最快方法。我现在不关心检索文件名。

最佳答案

从 .NET 4.0 开始,有两种方法,EnumerateDirectories/EnumerateFiles 可以延迟枚举目录/文件。

private static bool FilesPresent()
{
IEnumerable<string> dirs = Directory.EnumerateDirectories(dataFileDirectoryPath, "*.*", SearchOption.TopDirectoryOnly);
foreach (string d in dirs)
{
IEnumerable<string> files = Directory.EnumerateFiles(d, "*.*", SearchOption.AllDirectories);
if (files.Any()) { return true; }
}
return false;
}

从技术上讲,您可以将其重写为:

private static bool FilesPresent()
{
IEnumerable<string> dirs = Directory.EnumerateDirectories(dataFileDirectoryPath, "*.*", SearchOption.TopDirectoryOnly);
return dirs.Any(d => Directory.EnumerateFiles(d, "*.*", SearchOption.AllDirectories).Any());
}

但我确实觉得它会使它更难读。

关于c# - 快速 I/O 检查目录是否包含文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31605196/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com