如何解决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
相关产品推荐
相关产品推荐

