如何在CentOS运行的.NET Core控制台应用中创建777权限PDF文件
问题原因
Linux系统下.NET Core默认创建文件的权限受进程umask值限制,默认不会给所有用户读写权限,因此写入操作会触发UnauthorizedAccessException异常。
解决方案
方案1:代码直接指定文件权限(适用于.NET 5及以上版本)
.NET 5开始提供原生支持Unix权限设置的API,你可以修改FileStream构造函数,直接指定创建文件的权限为777:
首先引入命名空间:
using System.IO.Posix;
然后把你创建FileStream的代码替换成以下内容:
using (Stream outStream = new FileStream( item, FileMode.Create, FileAccess.ReadWrite, FileShare.None, 4096, FileOptions.None, (UnixFileMode)0o777 // 这里设置权限为777,若C#版本不支持0o前缀的八进制写法,可替换为十进制值511 ))
方案2:调用系统chmod命令修改权限(适用于所有.NET Core版本)
如果你的项目是.NET Core 3.1及更低版本,没有原生权限API,可以在文件创建完成后调用系统命令修改权限:
在Parallel.ForEach内部,关闭Stream之后添加以下代码:
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo { FileName = "/bin/chmod", Arguments = $"777 {item}", UseShellExecute = false, CreateNoWindow = true }).WaitForExit();
注意事项
- 首先确保程序运行的账号对
Fichiers目录有读写执行权限,你可以先执行命令chmod 777 你的Fichiers目录绝对路径测试效果 - 777权限允许所有用户对文件进行读写执行操作,生产环境建议根据实际需求调整为更安全的权限,比如755即可满足大部分场景的读写需求。
内容的提问来源于stack exchange,提问作者Jordan Suzanne
相关产品推荐
相关产品推荐

