gpt4 book ai didi

c# - 尝试从未经许可的位置添加文件时如何处理 UnauthorizedAccessException

转载 作者:可可西里 更新时间:2023-11-01 08:07:04 26 4
gpt4 key购买 nike

我正在尝试通过这种方式从文件夹中获取所有文件:

try
{
string[] files = Directory.GetFiles(folderBrowserDialog1.SelectedPath, "*.*", SearchOption.AllDirectories);
}
catch (UnauthorizedAccessException)
{
throw;
}

如果我的根文件夹包含用户无权访问的文件夹,则会捕获 UnauthorizedAccessException 并且我的数组为空并且所有递归都失败。

我该如何处理这种情况并确保我的代码在未经许可的情况下忽略位置,但从具有权限的位置添加文件?

最佳答案

参见 SafeFileEnumerator在另一篇文章中。我过去成功地使用了 SafeFileEnumerator 代码。当您根本无权访问单个文件时,它可以防止丢失整个枚举,因此您仍然可以遍历您可以访问的文件。

编辑:我拥有的版本与我链接到的版本略有不同,所以让我分享我拥有的版本。

public static class SafeFileEnumerator
{
public static IEnumerable<string> EnumerateDirectories(string parentDirectory, string searchPattern, SearchOption searchOpt)
{
try
{
var directories = Enumerable.Empty<string>();
if (searchOpt == SearchOption.AllDirectories)
{
directories = Directory.EnumerateDirectories(parentDirectory)
.SelectMany(x => EnumerateDirectories(x, searchPattern, searchOpt));
}
return directories.Concat(Directory.EnumerateDirectories(parentDirectory, searchPattern));
}
catch (UnauthorizedAccessException ex)
{
return Enumerable.Empty<string>();
}
}

public static IEnumerable<string> EnumerateFiles(string path, string searchPattern, SearchOption searchOpt)
{
try
{
var dirFiles = Enumerable.Empty<string>();
if (searchOpt == SearchOption.AllDirectories)
{
dirFiles = Directory.EnumerateDirectories(path)
.SelectMany(x => EnumerateFiles(x, searchPattern, searchOpt));
}
return dirFiles.Concat(Directory.EnumerateFiles(path, searchPattern));
}
catch (UnauthorizedAccessException ex)
{
return Enumerable.Empty<string>();
}
}
}

示例用法:

foreach(string fileName in SafeFileEnumerator.EnumerateFiles(folderPath, "*" + extension, SearchOption.AllDirectories))
{
//Do something with filename, store into an array or whatever you want to do.
}

关于c# - 尝试从未经许可的位置添加文件时如何处理 UnauthorizedAccessException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13954630/

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