You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决C#访问MyDocuments文件时的SystemUnauthorizedAccessException异常?

解决方案建议

问题原因

MyDocuments目录下存在部分权限受限的子目录(如系统同步文件夹、受保护的用户子目录),使用Directory.GetFiles(..., SearchOption.AllDirectories)会一次性遍历所有层级,遇到无权限访问的目录时直接抛出SystemUnauthorizedAccessException。

可行方案:递归遍历+异常捕获

手动实现递归遍历逻辑,在访问每个目录时捕获未授权异常,跳过无法访问的目录,确保能收集所有有权限访问的文件。

代码示例

private List<string> GetAllAccessibleFiles(string rootPath)
{
    var fileList = new List<string>();
    
    try
    {
        // 添加当前目录下的所有文件
        fileList.AddRange(Directory.GetFiles(rootPath));
        
        // 递归遍历子目录
        foreach (string subDir in Directory.GetDirectories(rootPath))
        {
            try
            {
                fileList.AddRange(GetAllAccessibleFiles(subDir));
            }
            catch (System.UnauthorizedAccessException)
            {
                // 跳过无权限访问的子目录
                continue;
            }
            catch (System.IO.DirectoryNotFoundException)
            {
                // 处理遍历过程中目录被删除的情况
                continue;
            }
        }
    }
    catch (System.UnauthorizedAccessException)
    {
        // 根目录无权限时返回空列表
        return fileList;
    }
    
    return fileList;
}

// 使用示例
var myDocsPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
var allFiles = GetAllAccessibleFiles(myDocsPath);
foreach (string doc in allFiles)
{
    MessageBox.Show(doc);
}

补充说明

  • 该方法会自动跳过所有无权限访问的目录,避免程序因权限问题中断,同时完整收集所有可访问的文件。
  • 如果需要追踪无法访问的目录,可以在catch块中添加日志记录逻辑(比如输出目录路径到控制台或本地日志文件)。

内容的提问来源于stack exchange,提问作者gpicchiarelli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 09:44:58