gpt4 book ai didi

c# - 在 C# 中搜索子目录

转载 作者:太空狗 更新时间:2023-10-29 22:10:06 25 4
gpt4 key购买 nike

我有一个文件名列表,我想搜索一个目录及其所有子目录。这些目录每个包含大约 200,000 个文件。我的代码找到了文件,但每个文件大约需要 20 分钟。有人可以建议更好的方法吗?

代码片段

String[] file_names = File.ReadAllLines(@"C:\file.txt");
foreach(string file_name in file_names)
{
string[] files = Directory.GetFiles(@"I:\pax\", file_name + ".txt",
SearchOption.AllDirectories);
foreach(string file in files)
{
System.IO.File.Copy(file,
@"C:\" +
textBox1.Text + @"\N\O\" +
file_name +
".txt"
);
}

}

最佳答案

如果您要在同一目录结构中搜索多个文件,您应该一次找到该目录结构中的所有 文件,然后在内存中搜索它们。无需一次又一次地访问文件系统。

编辑:有一种使用 LINQ 的优雅方式可以做到这一点,而没有使用 LINQ 则不太优雅。这是 LINQ 方式:

using System;
using System.IO;
using System.Linq;

class Test
{
static void Main()
{
// This creates a lookup from filename to the set of
// directories containing that file
var textFiles =
Directory.GetFiles("I:\\pax", "*.txt", SearchOption.AllDirectories)
.ToLookup(file => Path.GetFileName(file),
file => Path.GetDirectoryName(file));

string[] fileNames = File.ReadAllLines(@"c:\file.txt");
// Remove the quotes for your real code :)
string targetDirectory = "C:\\" + "textBox1.Text" + @"\\N\\O\\";

foreach (string fileName in fileNames)
{
string tmp = fileName + ".txt";
foreach (string directory in textFiles[tmp])
{
string source = Path.Combine(directory, tmp);
string target = Path.Combine(targetDirectory, tmp);
File.Copy(source, target);
}
}
}
}

如果您需要非 LINQ 方式,请告诉我。不过,在我这样做之前要检查一件事——这可能会在彼此的顶部复制多个文件。那是真的您想做的吗? (假设 a.txt 存在于多个地方,并且“a”在文件中。)

关于c# - 在 C# 中搜索子目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1917639/

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