8

配列内のディレクトリ内のすべてのファイル(サブフォルダー内のファイルを含む)を取得したい

string[] filePaths = Directory.GetFiles(@"c:\",SearchOption.AllDirectories);     

これに伴う問題は次のとおりです。例外がスローされると、コマンド全体が停止します。フォルダにアクセスできない場合にフォルダをスキップするように、これを行うためのより良い方法はありますか?

4

4 に答える 4

6

おそらく、自分でもう少し入力して、次のようなディレクトリウォーカーを作成する必要があります。

    public static string[] FindAllFiles(string rootDir) {
        var pathsToSearch = new Queue<string>();
        var foundFiles = new List<string>();

        pathsToSearch.Enqueue(rootDir);

        while (pathsToSearch.Count > 0) {
            var dir = pathsToSearch.Dequeue();

            try {
                var files = Directory.GetFiles(dir);
                foreach (var file in Directory.GetFiles(dir)) {
                    foundFiles.Add(file);
                }

                foreach (var subDir in Directory.GetDirectories(dir)) {
                    pathsToSearch.Enqueue(subDir);
                }

            } catch (Exception /* TODO: catch correct exception */) {
                // Swallow.  Gulp!
            }
        }

        return foundFiles.ToArray();
    }
于 2012-08-13T01:12:47.600 に答える
-1

またはこれを試してください:

        DirectoryInfo dirs = new DirectoryInfo(@"c:\");
        List<string> filenames = (from i in dirs.GetFiles("*", SearchOption.AllDirectories)
                                  select i.Name).ToList();

または拡張子のないファイル名:

        DirectoryInfo dirs = new DirectoryInfo@"c:\");
        List<string> filenames = (from i in dirs.GetFiles("*", SearchOption.AllDirectories)
                                  select System.IO.Path.GetFileNameWithoutExtension(i.Name)).ToList();
于 2012-08-13T01:27:43.677 に答える
-1

これを試して :

DirectoryInfo directory = new DirectoryInfo(@"c:\");
        DirectoryInfo[] folders = directory.GetDirectories("*", SearchOption.AllDirectories);

        List<string> files = new List<string>();
        foreach (DirectoryInfo info in folders)
        {
            foreach (FileInfo file in info.GetFiles())
            {
                files.Add(file.Name);
            }
        }
于 2012-08-13T01:18:53.633 に答える