[英]Find a file by file name
通過文件名查找文件然后返回其路徑的最佳方法是什么?
例如
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";
}
是否有通過硬盤驅動器上的文件名查找文件的最佳實踐方法?
嘗試這個:
Directory.GetFiles(@"c:\", filename, SearchOption.AllDirectories).FirstOrDefault()
請試試這個。
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;
如果我正在尋找一個文件並且我不知道該位置,那么我將使用 bultin Windows Search 。
請參閱代碼示例頁面以獲取特別是DSearch代碼示例的示例。
DSearch 代碼示例演示如何為靜態控制台應用程序創建一個類,以使用 ISearchQueryHelper 的 Microsoft.Search.Interop 程序集查詢 Windows Search。
否則, Directory
類具有內置幫助器,例如Directory.GetFiles
將進行模式匹配。
public static string[] GetFiles(
string path,
string searchPattern,
SearchOption searchOption
)
您可以使用Directory.GetFiles
遞歸搜索目錄以查找匹配文件:
下面的工作示例將在目錄"C:\"
中找到與"Hello"
匹配的文件的所有完整路徑。
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);
}
編輯
以下答案更好,因為它解決了訪問被拒絕的問題:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.