通过文件名查找文件然后返回其路径的最佳方法是什么?
e.g。
public string GetFilePath(string filename)
{
// some work to get the path
return filepath;
}
我试过这个但没有成功
public string GetFileContent(string filename)
{
DirectoryInfo hdDirectoryInWhichToSearch = new DirectoryInfo(@"c:\");
FileInfo[] filesInDir = hdDirectoryInWhichToSearch.GetFiles("*" + filename + "*.*");
foreach (FileInfo foundFile in filesInDir)
{
string fullName = foundFile.FullName;
return fullName;
}
return "found nothing";
}
是否有最佳实践方法可以通过硬盘驱动器上的文件名查找文件?
答案 0 :(得分:1)
试试这个:
Directory.GetFiles(@"c:\", filename, SearchOption.AllDirectories).FirstOrDefault()
答案 1 :(得分:1)
请试一试。
string[] files = Directory.GetFiles(dir);
foreach(string file in files)
{
if(Path.GetFileName(file).Contains("Your filename"))
{
do stuffs...
}
}
表现:
IEnumerable<System.IO.FileInfo> fileList = dir.GetFiles("*.*",System.IO.SearchOption.AllDirectories);
string searchTerm = @"Visual Studio";
// Search the contents of each file.
// A regular expression created with the RegEx class
// could be used instead of the Contains method.
// queryMatchingFiles is an IEnumerable<string>.
var queryMatchingFiles =
from file in fileList
let fileText =Path.GetFileName(file)
where fileText.Contains(searchTerm)
select file.FullName;
答案 2 :(得分:0)
如果我正在查找文件并且我不知道该位置,那么我会使用bultin Windows Search。
请参阅code samples页面,了解具体DSearch代码示例的示例。
DSearch代码示例演示了如何为a创建类 静态控制台应用程序使用。来查询Windows搜索 用于ISearchQueryHelper的Microsoft.Search.Interop程序集。
否则Directory
类有内置辅助工具,例如Directory.GetFiles
,它们将进行模式匹配。
public static string[] GetFiles(
string path,
string searchPattern,
SearchOption searchOption
)
答案 3 :(得分:0)
您可以使用Directory.GetFiles
递归在目录中搜索匹配文件:
下面的工作示例将找到目录"Hello"
中与"C:\"
匹配的文件的所有完整路径。
static void Main(string[] args)
{
var files = GetFilePaths("*Hello*", "C:\\");
foreach (var file in files)
{
Console.WriteLine(file);
}
}
public static IEnumerable<string> GetFilePaths(string pattern, string directory)
{
return Directory.GetFiles(directory, pattern, SearchOption.AllDirectories);
}
修改强>
以下答案更好,因为它可以解决访问被拒绝的问题:
Ignore folders/files when Directory.GetFiles() is denied access