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