9

ディレクトリ ツリー全体を調べて、リスト ボックス コントロールのすべてのファイル名を出力しようとしています。いくつかのコードを書きましたが、エラーがあります。私が間違っているのかわかりません。ちなみに、これは Visual Studio で WPF を使用した C# です。

Visual Studio のプロジェクト ソリューション全体を次に示します: http://tinyurl.com/a2r5jv9

プロジェクト ソリューションをダウンロードしない場合は、MainWindow.xaml.cs のコードを次に示します: http://pastebin.com/cWRTeq3N

ここにもコードを貼り付けます。

public partial class MainWindow : Window
{
    private void Button_Click_1(object sender, RoutedEventArgs e)
    {
        string sourcePath = @"C:\temp\";            

        static void DirSearch(string sourcePath)
        {
            try
            {
                foreach (string d in Directory.GetDirectories(sourcePath))
                {
                    foreach (string f in Directory.GetFiles(d))
                    {
                        listBox1.Items.Add(f);
                    }
                    DirSearch(d);
                }
            }                      
            catch (Exception ex)
            {
                listBox1.Items.Add(ex.Message);
            }
        }
    }
}
4

2 に答える 2

22

Microsoftサポートサイトに完全な例があります

ここでの問題は、イベントハンドラーから呼び出し たいのですが、イベントハンドラー内でメソッドを定義DirSearchしようとしているようです。これは無効です。DirSearch

次のようにコードを変更する必要があります。

private void Button_Click_1(object sender, RoutedEventArgs e)
{
    string sourcePath = @"C:\temp\";
    this.DirSearch(sourcePath);
}

private void DirSearch(string sDir) 
{
    try 
    {
        foreach (string f in Directory.GetFiles(sDir, txtFile.Text)) 
        {
            lstFilesFound.Items.Add(f);
        }

        foreach (string d in Directory.GetDirectories(sDir)) 
        {
            this.DirSearch(d);
        }
    }
    catch (System.Exception excpt)
    {
        listBox1.Items.Add(ex.Message);
    }
}
于 2013-03-15T23:43:50.937 に答える
16

SearchOptionを受け入れるGetDirectories()オーバーロードを使用します。

string[] dirs = Directory.GetDirectories(path, "*", SearchOption.AllDirectories))
foreach(dir)
{
    ...
}

以上EnumerateFiles()

IEnumerable<string> files = Directory.EnumerateFiles(path, "*.*", SearchOption.AllDirectories))
foreach(files)
{
    ...
}

遅延ファイルシステムスキャンを実行することに注意してください。

于 2013-03-15T23:45:18.623 に答える