当Directory.GetFiles()被拒绝访问时,忽略文件夹/文件

我正在尝试显示在所选目录(以及可选的任何子目录)中找到的所有文件的列表。我遇到的问题是,当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

}

}

}

}

以上是 当Directory.GetFiles()被拒绝访问时,忽略文件夹/文件 的全部内容, 来源链接: utcz.com/qa/426363.html

回到顶部