递归获取文件:跳过无法读取的文件/目录?

Wil*_*son 6 c# directory exception file

我想获取数组目录中的所有文件(包括子文件夹中的文件)

string[] filePaths = Directory.GetFiles(@"c:\",SearchOption.AllDirectories);     
Run Code Online (Sandbox Code Playgroud)

这个问题是:如果抛出异常,整个命令就会停止.有没有更好的方法来做到这一点,如果一个文件夹无法访问它只会跳过它?

ikh*_*ikh 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();
    }
Run Code Online (Sandbox Code Playgroud)