Go 如何在Windows中控制文件访问?

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基本上是一

Go用于设置文件和目录权限。例如,如果我想确保只有当前用户才能访问文件,我可以执行以下操作:

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