2

ルート ディレクトリからすべてのサブ ディレクトリとそのサブ ディレクトリのリストを (なくなるまで) 取得するにはどうすればよいでしょうか。

私の現在のコードは FolderBrowserDialog を使用しており (WPF にはそれがないため、winform から取得する必要があります)、そこからディレクトリを横断しようとします。これまでのところ、次のように、横方向に 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を 3 番目の引数として渡す必要があります。これにより、すべてのサブディレクトリも返されます。

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

SearchOption

  • SearchOption.AllDirectories : 現在のディレクトリとそのすべてのサブディレクトリを検索操作に含めます。このオプションには、マウントされたドライブやシンボリック リンクなどの再解析ポイントが検索に含まれます。
  • SearchOption.TopDirectoryOnly : 現在のディレクトリのみを検索操作に含めます。
于 2013-11-07T05:34:33.717 に答える