簡體   English   中英

C#System.IO如何找到給定文件夾的所有子文件夾?

[英]c# System.IO how do i find all the subfolders given a certain folder?

到目前為止,這是我所做的:

class Program
{

    static void Main(string[] args)
    {

        DirectoryInfo startDirectory = new DirectoryInfo(@"C:\Users\Angelo\Desktop\ExerciseTest");

        string output = "";

        DirectoryInfo[] subDirectoryes = startDirectory.GetDirectories();

        for (int i = 0; i < subDirectoryes.Length; i++)
        {
            output = output + subDirectoryes[i].ToString() + "\r\n";
        }

        Console.WriteLine(output);

        Console.ReadLine();

    }
}

結果,這給了我指定文件夾的第一個子文件夾,問題是我需要找到指定文件夾中的所有子文件夾,子子文件夾,子子文件夾等。以及文件,然后使用此縮進輸出:

  • 子文件夾1
    • 子文件夾1
      • 子子子文件夾1
      • SubSubfolderFile1
    • 子子文件夾2
  • 子文件夾2
    • 子文件夾文件1

我已經嘗試了很多次,但是我不知道怎么做,也許我錯過了一些命令(這​​是我第一次使用c#System.IO編程),能否請給我一些提示或告訴我我應該使用什么命令? 我要瘋了。

應該使用GetDirectories的重載,以允許您定義搜索范圍:

DirectoryInfo[] subDirectoryes = 
              startDirectory.GetDirectories("*", SearchOption.AllDirectories);

這將獲取所有目錄,包括所有子目錄。

第一個參數是搜索文本過濾器,“ *”將找到所有文件夾。

帶有縮進的完整示例:

void Main()
{
    var path = @"C:\Users\Angelo\Desktop\ExerciseTest";
    var initialDepth = path.Split('\\').Count();

    DirectoryInfo startDirectory = new DirectoryInfo(path);

    StringBuilder sb = new StringBuilder();

    DirectoryInfo[] subDirectoryes = startDirectory.GetDirectories("*", SearchOption.AllDirectories);

    for (int i = 0; i < subDirectoryes.Length; i++)
    {
        var level = subDirectoryes[i].FullName.Split('\\').Count() - initialDepth;
        sb.AppendLine($"{new string('\t', level)}{subDirectoryes[i].Name}");
    }

    Console.WriteLine(sb.ToString());

    Console.ReadLine();
}

為了遍歷所有子文件夾,您需要遞歸函數。 基本上,您必須對遇到的所有目錄重復當前僅對根目錄應用的過程。

編輯:不得不花一點時間來提供此代碼示例:

class Program
{
    static void Main(string[] args)
    {
        var basePath = @"C:\Users\Angelo\Desktop\ExerciseTest";

        DirectoryInfo startDirectory = new DirectoryInfo(basePath);
        IterateDirectory(startDirectory, 0);

        Console.ReadLine();
    }

    private static void IterateDirectory(DirectoryInfo info, int level)
    {
         var indent = new string('\t', level);
         Console.WriteLine(indent + info.Name);
         var subDirectories = info.GetDirectories();

         foreach(var subDir in subDirectories)
         {
             IterateDirectory(subDir, level + 1);
         }
     }
 }

解釋一下,IterateDirectory的功能(根據要求):

  1. 它打印帶有縮進的目錄名稱,該縮進取決於目錄子樹中的當前級別。
  2. 對於當前目錄中的每個目錄:調用IterateDirectory方法,將level提高1。

這是遍歷樹狀結構的相當標准的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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