2

您如何从根目录中获取所有子目录及其子目录的列表(直到没有剩余子目录)。

我当前的代码使用 FolderBrowserDialog(WPF 没有,所以我必须从 winforms 中获取它),并从那里尝试横向目录。到目前为止,我只能使其横向 1 级深,如

如果音乐目录设置为

\rock\metallica\ride the lightning
\rock\aerosmith\
\rock\something\

并且用户选择\rock\,它只会从aerosmith、something 和metallica 中获取文件,而不是metallica 的子目录,骑着闪电。

private void btnAddTestFile_Click(object sender, RoutedEventArgs e)
{
    string[] files;
    FolderBrowserDialog dlg = new FolderBrowserDialog();

    DialogResult result = dlg.ShowDialog();
    if (result.ToString() == "OK")
    {
        InitializePropertyValues();


        files = System.IO.Directory.GetFiles(dlg.SelectedPath, "*.mp3");
        foreach (string file in files)
        {
            lstvTrackList.Items.Add(new TrackList{ ID = lstvTrackList.Items.Count.ToString(), TrackName = Regex.Match(file, @".*\\(.*).mp3").Groups[1].Value, TrackPath = file });
        }

        System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(dlg.SelectedPath);
        foreach (System.IO.DirectoryInfo d in di.GetDirectories())
        {
            files = System.IO.Directory.GetFiles(d.FullName, "*.mp3");
            foreach (string file in files)
            {
                lstvTrackList.Items.Add(new TrackList{ ID = lstvTrackList.Items.Count.ToString(), TrackName = Regex.Match(file, @".*\\(.*).mp3").Groups[1].Value, TrackPath = file });
            }
        }
    }
}

基本上我尝试做的是首先从根目录添加所有松散文件,然后获取根目录中的目录列表并添加这些文件。

如果我知道如何从根目录开始爬取所有子目录,我想我可以弄清楚,但我不太明白我将如何实现这一点。

有没有人有任何提示、提示或示例代码允许您指定一个根目录,然后爬取每个目录(保留一个字符串数组),直到找不到更多子目录,这样我就可以从每个目录中抓取文件?

4

1 回答 1

2

要获取所有子目录,您必须将SearchOption作为第三个参数传递,这也将返回所有子目录。

Directory.GetFiles("","",SearchOption.AllDirectories);

SearchOption

  • SearchOption.AllDirectories:在搜索操作中包括当前目录及其所有子目录。此选项包括重新分析点,例如搜索中的已安装驱动器和符号链接。
  • SearchOption.TopDirectoryOnly:在搜索操作中仅包括当前目录。
于 2013-11-07T05:34:33.717 回答