C# C从所选目录检索子目录

C# C从所选目录检索子目录,c#,file,file-upload,directory,C#,File,File Upload,Directory,我正在试图找到一种从选定目录检索子文件夹的方法。我在代码中使用FolderBrowserDialog让所有用户选择程序将使用的根目录。但是我被困在如何从中获取子目录上。我想将这些子目录字符串名放在一个数组中,以便以后使用。我尝试在所选路径中使用Directory.getfiles,但这不会显示子目录。 非常感谢您的帮助!多谢各位 private void Folderselector_Click(object sender, EventArgs e) { FolderB

我正在试图找到一种从选定目录检索子文件夹的方法。我在代码中使用FolderBrowserDialog让所有用户选择程序将使用的根目录。但是我被困在如何从中获取子目录上。我想将这些子目录字符串名放在一个数组中,以便以后使用。我尝试在所选路径中使用Directory.getfiles,但这不会显示子目录。 非常感谢您的帮助!多谢各位

 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);
            }
        }
    }
像这样的

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();

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

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

将方法重载与SearchOption.AllDirectories一起使用

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);
   }
}

我还没有测试过它,但类似的东西应该可以使用。

使用Directory.GetDirectoriesyourRootPath;你能不能再运行一遍以获取子sbu目录?你不必手动操作,将SearchOption.AllDirectories传递给Directory.GetDirectories将为你完成这项操作,正如其他答案所说的那样。