var unixFileInfo = new Mono.Unix.UnixFileInfo("test.txt");
// set file permission to 644
unixFileInfo.FileAccessPermissions =
FileAccessPermissions.UserRead | FileAccessPermissions.UserWrite
| FileAccessPermissions.GroupRead
| FileAccessPermissions.OtherRead;
// Returns true if success and false otherwise
// permissions can be an int or a string. For example it can also be +x, -x etc..
bool Chmod(string filePath, string permissions = "700", bool recursive = false)
{
string cmd;
if (recursive)
cmd = $"chmod -R {permissions} {filePath}";
else
cmd = $"chmod {permissions} {filePath}";
try
{
using (Process proc = Process.Start("/bin/bash", $"-c \"{cmd}\""))
{
proc.WaitForExit();
return proc.ExitCode == 0;
}
}
catch
{
return false;
}
}
4条答案
按热度按时间ut6juiuv1#
目前,.NET Core中没有内置的API。然而,.NET Core团队正在努力使
Mono.Posix
在.NET Core上可用。这将公开API以在托管代码中执行此类操作。参见https://github.com/dotnet/corefx/issues/15289和https://github.com/dotnet/corefx/issues/3186。您可以在这里尝试此API的早期版本:https://www.nuget.org/packages/Mono.Posix.NETStandard/1.0.0-beta1如果不想使用Mono.Posix,可以通过调用本机代码来实现相同的功能。使用P/Invoke,可以从
libc
调用chmod
函数。有关本机API的更多详细信息,请参阅man 2 chmod
。mhd8tkvw2#
我通过启动一个新进程并执行bash
chmod
命令解决了这个问题。示例:
然后:
您还可以使用这个
Exec
方法来运行任何其他类型的bash命令。polhcujo3#
这里有一个简单的chmod函数,你可以在c#中使用,没有依赖关系。
bksxznpy4#
我知道这个问题有点老了,但对于.NET 7及以上版本,有一个更简单的API。