如何在任何路径描述中找到文件?
How can I find a file within any description of path?
我需要在我的硬盘上找到特定的 file/folder。
例如我需要找到一个文件(do1.bat)然后存储文件的路径。但我不知道它可以存储在哪里,所以我必须扫描所有硬盘。
我如何为此使用 C#?
参考:https://msdn.microsoft.com/en-us/library/07wt70x2(v=vs.110).aspx
List<string> lstfilepaths = new List<string>();
public static void ProcessDirectory(string targetDirectory)
{
// Process the list of files found in the directory.
string [] fileEntries = Directory.GetFiles(targetDirectory);
foreach(string fileName in fileEntries) // included as per your logic
{
if(fileName == "do1.bat")
{
ProcessFile(fileName);
}
}
// Recurse into subdirectories of this directory.
string [] subdirectoryEntries = Directory.GetDirectories(targetDirectory);
foreach(string subdirectory in subdirectoryEntries)
ProcessDirectory(subdirectory);
}
public static void ProcessFile(string path)
{
lstfilepaths.Add(path);
}
这应该会为您提供一个文件列表,与您的搜索模式相匹配
string[] Result = Directory.GetFiles(@"C:\", "do1.bat", SearchOption.AllDirectories);
一个简单的方法是
var results = Directory.GetFiles("c:\", "do1.bat", SearchOption.AllDirectories);
这将遍历所有目录并收集所有名为 do1.bat
的文件。不幸的是,这将 无法在完整的 c:\
上工作,因为如果您无权访问目录,它会抛出 exceptions,这肯定会发生的。
所以这是一个递归版本:
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);
这将在 C:\
的任何子目录中找到所有名为 do1.bat
的文件,并在 results
列表中登记 FileInfo
。
对于一个文件:
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:\");
我需要在我的硬盘上找到特定的 file/folder。 例如我需要找到一个文件(do1.bat)然后存储文件的路径。但我不知道它可以存储在哪里,所以我必须扫描所有硬盘。 我如何为此使用 C#?
参考:https://msdn.microsoft.com/en-us/library/07wt70x2(v=vs.110).aspx
List<string> lstfilepaths = new List<string>();
public static void ProcessDirectory(string targetDirectory)
{
// Process the list of files found in the directory.
string [] fileEntries = Directory.GetFiles(targetDirectory);
foreach(string fileName in fileEntries) // included as per your logic
{
if(fileName == "do1.bat")
{
ProcessFile(fileName);
}
}
// Recurse into subdirectories of this directory.
string [] subdirectoryEntries = Directory.GetDirectories(targetDirectory);
foreach(string subdirectory in subdirectoryEntries)
ProcessDirectory(subdirectory);
}
public static void ProcessFile(string path)
{
lstfilepaths.Add(path);
}
这应该会为您提供一个文件列表,与您的搜索模式相匹配
string[] Result = Directory.GetFiles(@"C:\", "do1.bat", SearchOption.AllDirectories);
一个简单的方法是
var results = Directory.GetFiles("c:\", "do1.bat", SearchOption.AllDirectories);
这将遍历所有目录并收集所有名为 do1.bat
的文件。不幸的是,这将 无法在完整的 c:\
上工作,因为如果您无权访问目录,它会抛出 exceptions,这肯定会发生的。
所以这是一个递归版本:
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);
这将在 C:\
的任何子目录中找到所有名为 do1.bat
的文件,并在 results
列表中登记 FileInfo
。
对于一个文件:
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:\");