簡體   English   中英

如何執行完整的遞歸目錄和文件掃描?

[英]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
}

你必須使用

Directory.GetFiles(targetDirectory);

就像在這個示例中一樣,它包含您正在尋找的完整實現

如果使用 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM