[英]How can i get from a FileInfo[] the file full name full directory including the file extension?
[英]How can I perform full recursive directory & file scan?
這是我的代碼:
private static void TreeScan(string sDir)
{
foreach (string d in Directory.GetDirectories(sDir))
{
foreach (string f in Directory.GetFiles(d))
{
//Save file f
}
}
TreeScan(d, client);
}
問題是它沒有獲取sDir (起始目錄)的文件,它只獲取文件夾和子文件夾中的文件。
我怎樣才能讓它也從 sDir 獲取文件?
不要重新發明輪子,使用允許您指定它搜索子目錄的GetFiles
的重載。
string[] files
= Directory.GetFiles(path, searchPattern, SearchOption.AllDirectories);
private static void TreeScan( string sDir )
{
foreach (string f in Directory.GetFiles( sDir ))
{
//Save f :)
}
foreach (string d in Directory.GetDirectories( sDir ))
{
TreeScan( d );
}
}
您的代碼存在一些問題。 一方面,您從未從根文件夾中看到文件的原因是您在執行和文件讀取之前進行了遞歸。 嘗試這個:
public static void Main()
{
TreeScan(@"C:\someFolder");
}
private static void TreeScan(string sDir)
{
foreach (string f in Directory.GetFiles(sDir))
Console.WriteLine("File: " + f); // or some other file processing
foreach (string d in Directory.GetDirectories(sDir))
TreeScan(d); // recursive call to get files of directory
}
如果使用 Fx4 及更高版本, EnumerateFiles
方法將返回所有具有高效 memory 管理的文件,而GetFiles
可能需要大目錄(或驅動器)上的最大資源。
var files = Directory.EnumerateFiles(dir.Path, "*.*");
您的 GetFiles 循環應該在 GetDirectories 循環之外。 你的 TreeScan 不應該留在 GetDirectories 循環中嗎? 簡而言之,代碼應如下所示:
private static void TreeScan(string sDir)
{
foreach (string d in Directory.GetDirectories(sDir))
{
TreeScan(d, client);
}
foreach (string f in Directory.GetFiles(d))
{
//Save file f
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.