如何忽略UnauthorizedAccessException并保持程序运行?
首先明确一点:没有办法绕过系统权限限制去读取无访问权限的文件,但我们完全可以让程序跳过这些文件,继续处理其他有权限的内容——核心问题大概率是你try-catch块的位置放错了!
你之前的程序终止,应该是把try-catch放在了整个文件遍历逻辑的外层(比如整个foreach循环或者Directory.GetFiles外面),这样一旦某个文件抛出异常,整个循环就会被中断,程序进入catch块后就直接结束了。正确的做法是:把try-catch放在单个文件的读取操作周围,让单个文件的异常不会影响整个遍历流程。
示例代码:单个目录文件遍历
using System; using System.IO; class Program { static void Main(string[] args) { string targetPath = @"C:\Your\Target\Directory"; // 遍历目录下的所有文件 foreach (var filePath in Directory.GetFiles(targetPath)) { try { // 尝试读取文件内容 string content = File.ReadAllText(filePath); // 这里写你的文件处理逻辑 Console.WriteLine($"成功读取:{filePath}"); } catch (UnauthorizedAccessException ex) { // 捕获权限异常,输出提示后跳过当前文件 Console.WriteLine($"跳过无权限文件:{filePath},错误信息:{ex.Message}"); // 这里的continue可选,因为catch块执行完后会自动进入下一次循环 continue; } catch (Exception ex) { // 可以额外捕获其他可能的异常(比如文件被占用、路径不存在等) Console.WriteLine($"处理文件{filePath}时出错:{ex.Message}"); } } Console.WriteLine("文件遍历完成"); } }
示例代码:递归遍历子目录
如果需要遍历子目录,还要注意目录本身也可能触发权限异常,这时候递归调用时也要加try-catch:
using System; using System.IO; class Program { static void Main(string[] args) { string rootPath = @"C:\Your\Root\Directory"; ProcessDirectory(rootPath); Console.WriteLine("所有目录遍历完成"); } static void ProcessDirectory(string directoryPath) { try { // 处理当前目录下的文件 foreach (var filePath in Directory.GetFiles(directoryPath)) { try { string content = File.ReadAllText(filePath); Console.WriteLine($"成功读取:{filePath}"); } catch (UnauthorizedAccessException ex) { Console.WriteLine($"跳过无权限文件:{filePath},错误:{ex.Message}"); } } // 递归处理子目录 foreach (var subDirPath in Directory.GetDirectories(directoryPath)) { try { ProcessDirectory(subDirPath); } catch (UnauthorizedAccessException ex) { Console.WriteLine($"跳过无权限目录:{subDirPath},错误:{ex.Message}"); } } } catch (UnauthorizedAccessException ex) { Console.WriteLine($"无法访问目录:{directoryPath},错误:{ex.Message}"); } } }
关键总结
- 权限限制是系统级的,无法强行读取无权限的文件,只能选择跳过。
- 把try-catch放在单个文件/目录的操作逻辑内部,而不是整个遍历流程的外层,这样单个异常只会中断当前文件的处理,不会终止整个程序。
- 针对性捕获
UnauthorizedAccessException,避免捕获所有异常导致隐藏其他问题。
内容的提问来源于stack exchange,提问作者RedstoneUmbreon
相关产品推荐
相关产品推荐

