站点图标 星露谷值班站长

Golang 更改windows下文件权限

Go 操作文件权限在 linux 下很简单,使用 os.Chown() 方法就可以实现,但是 windows 下面却不能这样使用。

用于在 Windows 上操作 ACL 的 Go 库

https://github.com/hectane/go-acl

这个库使用也很简单,比如更改目录下全部文件权限为当前用户

var (Username    string)

func init() {u, err := user.Current()
	if err != nil {fmt.Println("获取当前用户失败!")
		os.Exit(2)
	}
	Username = u.Username
}

func WindowsAclFile(file_path string)  error {
	if err := acl.Apply(
		file_path,
		false,
		false,
		acl.GrantName(windows.GENERIC_ALL, Username),
	); err != nil {fmt.Println("文件权限失败!")
		return err
	}
	return nil
}
// 获取目录下所有文件
func FixAllFile() {
	filepath.Walk(basedir,
		func(filepath string, info os.FileInfo, err error) error {
			if err != nil {return err}
			if !info.IsDir() {if err := WindowsAclFile(filepath); err != nil {fmt.Println(filepath + "修复失败")
				}else{fmt.Println(filepath + "修复成功")
				}
			}
			return nil
		})

}

授予 ddn 读权限,授予 test 拒绝权限

if err := acl.Apply(
    "C:\\path\\to\\file.txt",
    false,
    false,
    acl.GrantName(windows.GENERIC_READ, "ddn"),
    acl.DenyName(windows.GENERIC_WRITE, "test"),
); err != nil {panic(err)
}

Windows 相关权限

DELETE
READ_CONTROL
WRITE_DAC
WRITE_OWNER
SYNCHRONIZE
STANDARD_RIGHTS_REQUIRED
STANDARD_RIGHTS_READ
STANDARD_RIGHTS_WRITE
STANDARD_RIGHTS_EXECUTE
STANDARD_RIGHTS_ALL
SPECIFIC_RIGHTS_ALL
ACCESS_SYSTEM_SECURITY
MAXIMUM_ALLOWED
GENERIC_READ
GENERIC_WRITE
GENERIC_EXECUTE
GENERIC_ALL

退出移动版