我希望獲取其中包含特定文件的所有文件夾/目錄的列表。我如何使用C#代碼執行此操作。如何使用c獲取包含特定文件的目錄列表
例如:考慮我有20個文件夾,其中7個文件夾中有一個名爲「abc.txt」的文件。我想知道所有具有文件「abc.txt」的文件夾。
我知道我們可以通過查看路徑中的所有文件夾以及每次檢查File.Exists(filename);但我想知道是否有其他方式做同樣的事情,而不是遍歷所有的文件夾(這可能會消耗很少的時間,當有很多文件夾)。
感謝
-Nayan
我希望獲取其中包含特定文件的所有文件夾/目錄的列表。我如何使用C#代碼執行此操作。如何使用c獲取包含特定文件的目錄列表
例如:考慮我有20個文件夾,其中7個文件夾中有一個名爲「abc.txt」的文件。我想知道所有具有文件「abc.txt」的文件夾。
我知道我們可以通過查看路徑中的所有文件夾以及每次檢查File.Exists(filename);但我想知道是否有其他方式做同樣的事情,而不是遍歷所有的文件夾(這可能會消耗很少的時間,當有很多文件夾)。
感謝
-Nayan
我會使用目錄類的方法EnumerateFiles用的搜索模式和SearchOption包括AllDirectories。這將返回與模式匹配的所有文件(包括目錄的完整文件名)。
使用Path類可以獲得文件的目錄。
string rootDirectory = //your root directory;
var foundFiles = Directory.EnumerateFiles(rootDirectory , "abc.txt", SearchOption.AllDirectories);
foreach (var file in foundFiles){
Console.WriteLine(System.IO.Path.GetDirectoryName(file));
}
EnumerateFiles只能因爲.NET框架4如果您正在使用舊版本的.NET框架的工作,那麼你可以使用目錄類的GetFiles。
更新(請參閱從PLB評論):
如果拒絕的訪問到一個目錄上面的代碼將失敗。在這種情況下,您將需要一個接一個地搜索每個目錄以處理異常。
public static void SearchFilesRecursivAndPrintOut(string root, string pattern)
{
//Console.WriteLine(root);
try
{
var childDireactory = Directory.EnumerateDirectories(root);
var files = Directory.EnumerateFiles(root, pattern);
foreach (var file in files)
{
Console.WriteLine(System.IO.Path.GetDirectoryName(file));
}
foreach (var dir in childDireactory)
{
SearchRecursiv(dir, pattern);
}
}
catch (Exception exception)
{
Console.WriteLine(exception);
}
}
下面介紹如何縮小按特定標準搜索(即只包括含有「微軟」,「IBM」或「NHibernate的」在其名稱中的DLL)。
var filez = Directory.EnumerateFiles(@"c:\MLBWRT", "*.dll", SearchOption.AllDirectories)
.Where(
s => s.ToLower().Contains("microsoft")
&& s.ToLower().Contains("ibm")
&& s.ToLower().Contains("nhibernate"));
string[] allFiles = filez.ToArray<string>();
for (int i = 0; i < allFiles.Length; i++) {
FileInfo fInfo = new FileInfo(allFiles[i]);
Console.WriteLine(fInfo.Name);
}
你應該使用'EnumerateFiles'來爲你的搜索添加一個where子句,同時這將查找包含「microsoft」,「ibm」和「nhibernate」的文件,你可能想要改變它。 – Eluvatar
你必須這樣做遞歸據我所知,我很害怕。 – Derek