1

次のコードは、ユーザーが C# Winforms アプリケーション ウィンドウのボタンにドロップしたときに、そのフォルダーとそのフォルダー内のファイルを処理します。このコードは正常に動作します:

List<string> filepaths = new List<string>();

foreach (var s in (string[])e.Data.GetData(DataFormats.FileDrop, false))
   {
       if (Directory.Exists(s))
       {
           //Add files from folder
           filepaths.AddRange(Directory.GetFiles(s));
       }
       else
       {
           //Add filepath
           filepaths.Add(s);
       }
   }

ただし、メイン フォルダー (サブフォルダー) 内に別のフォルダーがある場合、そのサブフォルダーを検出せず、サブフォルダー内のファイルを一覧表示します。

サブフォルダの名前とサブフォルダ内のファイルも検出する方法を教えてください。


編集:このようなものは機能しますか?

string[] fileList = Directory.GetFiles(@s, "*.*", SearchOption.AllDirectories);
4

2 に答える 2

1

Frazellと同じですが、次のようなファイルとディレクトリの情報タイプを使用するのが好きです。

編集:ProcessFile()メソッドを追加しました

public void ProcessFolder(DirectoryInfo dirInfo)
{
    //Check for sub Directories
    foreach (DirectoryInfo di in dirInfo.GetDirectories())
    {
        //Call itself to process any sub directories
        ProcessFolder(di);
    }

    //Process Files in Directory
    foreach (FileInfo fi in dirInfo.GetFiles())
    {
        //Do something with the file here
        //or create a method like:
        ProcessFile(fi)
    }
} 

public void ProcessFile(FileInfo fi)
{
    //Do something with your file
    Debug.Print(fi.FullName);
    //...
}
于 2012-12-20T20:18:31.667 に答える
1

Directory.GetDirectories() を使用してサブディレクトリをプルバックし、既に行っているのと同様にそれらをループする必要があります。

 // Process all files in the directory passed in, recurse on any directories  
    // that are found, and process the files they contain. 
    public static void ProcessDirectory(string targetDirectory) 
    {
        // Process the list of files found in the directory. 
        string [] fileEntries = Directory.GetFiles(targetDirectory);
        foreach(string fileName in fileEntries)
            ProcessFile(fileName);

        // Recurse into subdirectories of this directory. 
        string [] subdirectoryEntries = Directory.GetDirectories(targetDirectory);
        foreach(string subdirectory in subdirectoryEntries)
            ProcessDirectory(subdirectory);
    }

出典: MSDN

于 2012-12-20T19:35:31.573 に答える