我正在尝试显示在所选目录(以及可选的任何子目录)中找到的所有文件的列表。我遇到的问题是,当GetFiles()方法遇到无法访问的文件夹时,它将引发异常,并且过程停止。
如何忽略此异常(并忽略受保护的文件夹/文件)并继续将可访问文件添加到列表中?
try { if (cbSubFolders.Checked == false) { string[] files = Directory.GetFiles(folderBrowserDialog1.SelectedPath); foreach (string fileName in files) ProcessFile(fileName); } else { string[] files = Directory.GetFiles(folderBrowserDialog1.SelectedPath, "*.*", SearchOption.AllDirectories); foreach (string fileName in files) ProcessFile(fileName); } lblNumberOfFilesDisplay.Enabled = true; } catch (UnauthorizedAccessException) { } finally {}
您将必须手动执行递归;不要使用AllDirectories- 一次查看一个文件夹,然后尝试从子目录获取文件。未经测试,但如下所示(注意使用委托而不是构建数组):
using System; using System.IO; static class Program { static void Main() { string path = ""; // TODO ApplyAllFiles(path, ProcessFile); } static void ProcessFile(string path) {/* ... */} static void ApplyAllFiles(string folder, Action<string> fileAction) { foreach (string file in Directory.GetFiles(folder)) { fileAction(file); } foreach (string subDir in Directory.GetDirectories(folder)) { try { ApplyAllFiles(subDir, fileAction); } catch { // swallow, log, whatever } } } }