Go 如何在Windows中控制文件访问?
Go用于设置文件和目录权限。例如,如果我想确保只有当前用户才能访问文件,我可以执行以下操作:Go 如何在Windows中控制文件访问?,go,file-permissions,chmod,Go,File Permissions,Chmod,Go用于设置文件和目录权限。例如,如果我想确保只有当前用户才能访问文件,我可以执行以下操作: os.Chmod("somefile.txt", 0600) 这在Linux上非常有效,但在Windows上完全不起作用。在深入研究Go源代码之后,我发现了。似乎S_IWRITE是唯一受支持的属性 如何使用Go控制对Windows上文件或目录的访问?说明 Windows不使用传统的Unix权限。相反,Windows通过控制对文件和目录的访问。每个对象都有一个*来控制对该对象的访问 每个ACL基本上是一
os.Chmod("somefile.txt", 0600)
这在Linux上非常有效,但在Windows上完全不起作用。在深入研究Go源代码之后,我发现了。似乎S_IWRITE
是唯一受支持的属性
如何使用Go控制对Windows上文件或目录的访问?说明
Windows不使用传统的Unix权限。相反,Windows通过控制对文件和目录的访问。每个对象都有一个*来控制对该对象的访问
每个ACL基本上是一个列表,其中确定授予特定受信者(用户、组等)的访问权限。例如,文件可能包含一个ACE,该ACE授予特定用户对该文件的读取权限(GENERIC\u read
)
操作ACL和ACE是通过Windows API中的完成的
*从技术上讲,每个对象都有两个ACL—DACL和SACL
解决方案
谢天谢地,学习所有这些函数并不是必要的。我把所有的繁重工作都放在一起,并公开了一个名为(还有什么?Chmod
的函数。基本用法如下:
import "github.com/hectane/go-acl"
err := acl.Chmod("C:\\path\\to\\file.txt", 0755)
if err != nil {
panic(err)
}
结果
Chmod()
函数在文件的ACL中创建三个ACE:
- 一个给所有者(
)WinCreatorOwnerSid
- 一个用于组(
)WinCreatorGroupSid
- 每个人一个(
)WinWorldSid