【问题标题】:C# retrieving subdirectories from selected directoryC# 从选定目录中检索子目录
【发布时间】:2013-05-30 21:35:16
【问题描述】:

我正在尝试找到一种从选定目录中检索子文件夹的方法。我在我的代码中使用 FolderBrowserDialog 让所有用户选择程序将使用的“根”目录。但是我被困在如何从中获取子目录上。我想将这些子目录字符串名称放在一个数组中以供以后使用。我尝试使用 Directory.getFiles("the selected path"),但这不显示子目录。 任何帮助是极大的赞赏!谢谢

 private void Folderselector_Click(object sender, EventArgs e)
    {
        FolderBrowserDialog folderBrowserDialog1 = new FolderBrowserDialog();
        if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
        {
            listView1.Items.Clear();
            string[] files = Directory.GetFiles(folderBrowserDialog1.SelectedPath);
            foreach (string file in files)
            {
                string fileName = Path.GetFileNameWithoutExtension(file);
                ListViewItem item = new ListViewItem(fileName);
                item.Tag = file;
                listView1.Items.Add(item);
            }
        }
    }

【问题讨论】:

  • 使用Directory.GetDirectories(yourRootPath);

标签: c# file file-upload directory


【解决方案1】:

在 SearchOption.AllDirectories 中使用方法重载

【讨论】:

    【解决方案2】:

    这样的?

    var dirs = new DirectoryInfo(path).GetDirectories("*",SearchOption.AllDirectories)
                  .Select(d => d.FullName)
                  .ToList();
    

    如果你想要相对于你的根目录的目录名

    var dirs = new DirectoryInfo(path).GetDirectories("*",SearchOption.AllDirectories)
                   .Select(d => d.FullName)
                   .Select(s => new Uri(path).MakeRelative(new Uri(s)).ToString())
                   .ToList();
    

    【讨论】:

      【解决方案3】:

      关闭,但目录有不同的方法:

      System.IO.Directory.GetDirectories(string rootDirectory);
      

      【讨论】:

      • 你不能再运行一遍以获得子 sbu 目录吗?
      【解决方案4】:
      System.IO.Directory.GetDirectories(string rootDirectory);
      

      递归是你的解决方案

      List<string> dirsResult = new List<string>();
      public void GetDirectories(string currentDirectory)
      {   
         string[] directories = Directory.GetDirectories(currentDirectory);
         foreach(var dir in directories)
         {
             dirsResult.Add(dir);
             GetDirectories(dir);
         }
      }
      

      我还没有测试过,但是这样的东西应该可以工作。

      【讨论】:

      • 您不必手动执行此操作,将SearchOption.AllDirectories 传递给Directory.GetDirectories 将为您完成,正如其他答案已经说过的那样。
      猜你喜欢
      • 2011-05-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-20
      相关资源
      最近更新 更多