使用C#搜索文件

时间:2010-06-23 14:58:29

标签: c#

在C#中以编程方式搜索文件的最快方法是什么。我知道文件的相对位置,让我们说"abcd\efgh\test.txt".我也知道这个文件在E:\ drive上。 “abcd”是E:\ drive中某个目录的子目录。

由于

5 个答案:

答案 0 :(得分:2)

由于您知道要搜索的根目录以及文件名的字符串模式,因此可以使用根目录创建DirectoryInfo:

DirectoryInfo dir = new DirectoryInfo(@"E:\");

然后拨打GetFiles()以获取所有匹配项。传递SearchOption.AllDirectories将确保搜索是递归的。

List<FileInfo> matches = 
    new List<FileInfo>(dir.GetFiles(partialFilename, 
        SearchOption.AllDirectories));

或者如果您知道部分路径(而不是文件名):

List<DirectoryInfo> matches =
    new List<DirectoryInfo>(dir.GetDirectories(partialDirectoryName,
        SearchOption.AllDirectories));

然后您可以从那里导航到该文件。

答案 1 :(得分:0)

因此,如果我理解正确,您知道路径将是以下形式:

"E:\\" + something + "\\abcd\\efgh\\test.txt"

如果something只有1级深度,那么只需获取E:上的所有目录,然后尝试在每个子目录上打开一个文件。

如果something深度超过1级,则进行递归调用以获取目录,直至找到abcd

答案 2 :(得分:0)

最快的方式可能是使用FindFirstFile等api,但我认为你可以用Directory.GetDirectories(找到合适的子目标)来快速(并且更容易)做到这一点然后Directory.GetFiles找到实际文件。

答案 3 :(得分:0)

只需使用File.Exists方法并遍历所有可能的文件名。也许是这样的(未经测试):

 string SearchInFolder(string root) {

    if (File.Exists(Path.Append(root, "\\abcd\\efgh\\test.txt")) return Path.Append(root, "\\abcd\\efgh\\test.txt");
    foreach(var folder in Directory.GetDirectories(root)) {
       var fullFile = Path.Append(folder, "\\abcd\\efgh\\test.txt");
       if (File.Exists(fullFile)) {
           // Found it !!!!
           return fullFile;
       } else {
           var result = SearchInFolder(folder);
           if (result != null) return result;
       }
    }
    return null;
 }

但是这会搜索模式的整个E:\驱动器,也搜索子文件夹。

答案 4 :(得分:0)

我认为该算法将从e:\开始并读取所有目录。如果其中一个是\ abcd \,请立即检查路径和文件的其余部分,例如efgh \ test.txt。

如果e:\没有\ abcd \,那么你需要遍历每个子目录并进行相同的检查。 \ abcd \存在吗?是的,检查efgh \ text.txt。没有?遍历子目录。

如果你需要绝对最快,当你找不到\ abcd \,并且你有你的子目录列表,你现在必须去检查,你可以引入一定程度的线程。但这可能会很快变得毛茸茸。