Mono环境下MAC系统访问文件夹提示Access denied问题求助
Mono Mac环境目录写入访问拒绝问题解决方案
根因定位
你遇到的报错由两类问题共同导致:
- 代码逻辑错误:
FileStream构造函数要求传入具体文件的完整路径,你当前传入的是文件夹路径,系统自然无法对目录执行文件级别的写入操作,这也匹配你单独创建单个文件可正常写入的现象。 - Mac系统专属权限限制:MacOS 10.15+ 对
~/Documents等用户核心目录增加了沙箱访问限制,即使当前用户对目录有读写权限,启动Mono程序的终端/IDE如果没有授予对应的磁盘访问权限,也会触发目录内写入失败。
修复步骤
- 首先修正代码逻辑,拼接具体文件路径后再创建
FileStream,参考修正代码:
// 仅保存文件夹路径 var dirPath = "/Users/pat/Documents/Work/TestConsole/PdftronTestConsole/NewDirectory1/"; // 拼接实际要写入的文件名,替换为你解压后的实际文件名即可 var targetFilePath = Path.Combine(dirPath, resFileName); Assembly asm = Assembly.GetExecutingAssembly(); //读取嵌入式资源 inStream = new BufferedStream(asm.GetManifestResourceStream(resFileName)); Directory.CreateDirectory(dirPath); // 传入具体文件路径而非文件夹路径 outStream = new FileStream(targetFilePath, FileMode.Create, FileAccess.Write);
- 若修正代码后仍有权限报错,按以下步骤配置系统权限:
- 打开苹果菜单→
系统设置→隐私与安全性→下拉找到完全磁盘访问权限 - 在权限列表中找到你运行程序的工具(比如终端、VSCode、Rider等),勾选右侧的权限开关
- 重启对应工具后重新运行程序即可正常写入
- 打开苹果菜单→
- 若你是将程序打包为.app独立包运行时出错,可在包内的
Info.plist中新增com.apple.security.files.user-selected.read-write权限配置,重新签名后即可正常运行。
内容的提问来源于stack exchange,提问作者KuramaUzumaki
相关产品推荐
相关产品推荐

