我想获取数组中目录中的所有文件(包括子文件夹中的文件)
string[] filePaths = Directory.GetFiles(@"c:\",SearchOption.AllDirectories);
问题是:如果抛出异常,整个命令都会停止。有没有更好的方法来做到这一点,以便如果无法访问文件夹,它会跳过它?
最佳答案
然后您可能需要自己输入更多内容,然后编写一个像这样的目录遍历器:
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();
}
关于c# - 递归获取文件 : skip files/directories that cannot be read?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11927116/