如何在路径的任何描述中找到文件?

时间:2016-03-09 12:12:51

标签: c# file path-finding

我需要在硬盘上找到特定的文件/文件夹。 例如,我需要找到一个文件(do1.bat),然后存储文件的路径。但我不知道它可以存储在哪里,所以我必须扫描所有硬盘。 我怎样才能使用C#?

4 个答案:

答案 0 :(得分:1)

这应该为您提供与您的搜索模式匹配的文件列表

string[] Result = Directory.GetFiles(@"C:\", "do1.bat", SearchOption.AllDirectories);

答案 1 :(得分:1)

一种简单的方法是

var results = Directory.GetFiles("c:\\", "do1.bat", SearchOption.AllDirectories);

这会递归到所有目录并收集名为do1.bat的所有文件。不幸的是,这将无法完成c:\ ,因为如果您无法访问某个目录,它将会抛出例外,这肯定会发生。< / p>

所以这是一个递归版本:

private static void FindFile(DirectoryInfo currentDirectory, string pattern, List<FileInfo> results)
{
    try 
    {
        results.AddRange(currentDirectory.GetFiles(pattern, SearchOption.TopDirectoryOnly));
        foreach (DirectoryInfo dir in currentDirectory.GetDirectories("*", SearchOption.TopDirectoryOnly).Where(d => d.Name != "." && d.Name != ".."))
            FindFile(dir, pattern, results);
    }
    catch
    { 
        // probably no access to directory
    }
}

通过目录树递归并尝试来获取目录中的文件,然后是所有子目录(...除外)。
你可以这样使用它:

DirectoryInfo d = new DirectoryInfo("c:\\");
List<FileInfo> results = new List<FileInfo>();
FindFile(d, "do1.bat", results);

这将在do1.bat的任何子目录中找到名为C:\\的所有文件,并在FileInfo列表中登记results

答案 2 :(得分:0)

参考:https://msdn.microsoft.com/en-us/library/07wt70x2(v=vs.110).aspx

mysql> create table t1(c1 int, c2 int);
Query OK, 0 rows affected (0.26 sec)

mysql> insert into t1 values(1,1),(1,2),(2,4),(2,2),(2,4);
Query OK, 5 rows affected (0.01 sec)
Records: 5  Duplicates: 0  Warnings: 0

mysql> select c1, c2 from t1;
+------+------+
| c1   | c2   |
+------+------+
|    1 |    1 |
|    1 |    2 |
|    2 |    4 |
|    2 |    2 |
|    2 |    4 |
+------+------+
5 rows in set (0.00 sec)

mysql> select distinct(c1), c2 from t1;
+------+------+
| c1   | c2   |
+------+------+
|    1 |    1 |
|    1 |    2 |
|    2 |    4 |
|    2 |    2 |
+------+------+
4 rows in set (0.00 sec)

mysql> select distinct c1, c2 from t1;
+------+------+
| c1   | c2   |
+------+------+
|    1 |    1 |
|    1 |    2 |
|    2 |    4 |
|    2 |    2 |
+------+------+
4 rows in set (0.00 sec)

答案 3 :(得分:0)

对于一个文件:

public string FindFileByName(string fileName, string searchPath)
{
    string resultPath = null;
    DirectoryInfo directoryInWhichToSearch = new DirectoryInfo(searchPath);

    FileInfo foundFile = directoryInWhichToSearch.GetFiles(fileName, SearchOption.AllDirectories)[0];

    resultPath = foundFile.FullName;

    return resultPath;
}

然后您可以像这样使用它:

string fileFullPath = FindFileByName("do1.bat", @"C:\");