gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 16:30:05 26 4
gpt4 key购买 nike

我正在尝试显示在选定目录(以及可选的任何子目录)中找到的所有文件的列表。我遇到的问题是,当 GetFiles() 方法遇到它无法访问的文件夹时,它会抛出异常并且进程停止。

如何忽略此异常(并忽略 protected 文件夹/文件)并继续将可访问的文件添加到列表中?

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 - 一次查看一个文件夹,然后尝试从子目录中获取文件。未经测试,但类似于下面的内容(注意使用委托(delegate)而不是构建数组):

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
}
}
}
}

关于c# - 当 Directory.GetFiles() 被拒绝访问时忽略文件夹/文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11128624/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com