gpt4 book ai didi

c# - 仅访问目录时获取目录下所有文件的属性

转载 作者:行者123 更新时间:2023-11-30 16:28:15 25 4
gpt4 key购买 nike

我正在尝试用 C# 编写一个函数,该函数获取一个目录路径作为参数并返回一个字典,其中键是直接位于该目录下的文件,值是它们的最后修改时间。使用 Directory.GetFiles() 然后使用 File.GetLastWriteTime() 很容易做到这一点。但是,这意味着必须访问每个文件,这对我的需求来说太慢了。有没有办法在仅访问目录时执行此操作?文件系统是否支持这种需求?

编辑,阅读一些答案后:谢谢你们,你们都说的差不多——使用 FileInfo 对象。尽管如此,使用 Directory.GetFiles()(或 Directory.EnumerateFiles())获取这些对象的速度仍然很慢,而且我怀疑获取它们需要访问每个文件。如果文件系统仅将其文件的最后修改时间保留在文件本身中,则无法在没有文件访问权限的情况下提取该信息。这是这里的情况吗? DirectoryInfo 的 GetFiles() 和 EnumerateFiles() 是否访问每个文件或从目录条目中获取它们的信息?我知道,如果我只想获取文件名,我可以使用 Directory 类来完成此操作而无需访问每个文件。但是获取属性似乎更棘手......

根据 henk 的回复进行编辑:看起来使用 FileInfo 对象确实更快。我创建了以下测试:

static void Main(string[] args)
{
Console.WriteLine(DateTime.Now);

foreach (string file in Directory.GetFiles(@"\\169.254.78.161\dir"))
{
DateTime x = File.GetLastWriteTime(file);
}

Console.WriteLine(DateTime.Now);

DirectoryInfo dirInfo2 = new DirectoryInfo(@"\\169.254.78.161\dir");
var files2 = from f in dirInfo2.EnumerateFiles()
select f;
foreach (FileInfo file in files2)
{
DateTime x = file.LastWriteTime;
}

Console.WriteLine(DateTime.Now);
}

对于大约 800 个文件,我通常会得到如下内容:
2011 年 8 月 31 日 17:14:48
31/08/2011 17:14:51
2011 年 8 月 31 日 17:14:52

最佳答案

我没有做任何计时,但你最好的选择是:

DirectoryInfo di = new DirectoryInfo(myPath);
FileInfo[] files = di.GetFiles();

我认为目录文件记录中的所有 FileInfo 属性都可用,因此这应该(可能)需要最少的 I/O。

关于c# - 仅访问目录时获取目录下所有文件的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7256301/

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