在Go语言中,文件权限掩码是用来控制文件的访问权限的。

huangapple go评论116阅读模式
英文:

File permission mask in Go

问题

最近我在使用Go语言处理文件模式和权限时遇到了获取输出的问题。

以下是代码示例:

for _, file := range files {
    fmt.Println(file.Mode()) 
}

产生的输出结果如下:

drwx------
Lrwxr-xr-x
drwxr--r--
drwx------
drwx------
prw-r--r--
Srw-rw-rw-
Srw-rw-rw-
-rw-r--r--

我的问题是,如何以类似于0777的数字形式获取权限?

在这个回答中,是否有类似Python中提供的方法:https://stackoverflow.com/questions/5337070/how-can-i-get-a-files-permission-mask?

英文:

I was recently playing with file modes and permissions in Go and stumbled upon the output when getting it.

The following code:

for _, file := range files {
    fmt.Println(file.Mode()) 
}  

produces output:

drwx------
Lrwxr-xr-x
drwxr--r--
drwx------
drwx------
prw-r--r--
Srw-rw-rw-
Srw-rw-rw-
-rw-r--r--

My question is how do I get permissions in numbers like 0777, etc.

Is there a similar way like in python provided in this answer: https://stackoverflow.com/questions/5337070/how-can-i-get-a-files-permission-mask?

答案1

得分: 7

一旦你获得了文件的模式(使用FileInfo.Mode()),可以使用FileMode.Perm()方法。它返回一个os.FileMode类型的值,其底层类型为uint32

你所需要的格式(例如0777)是八进制的。你可以使用fmt.Printf()%o占位符以八进制格式(基数为8)打印一个数字。使用宽度4使其为4位数,并使用标志0使其以0填充。因此,打印文件权限的格式字符串为"%04o"

可以像这样打印它:

files, err := ioutil.ReadDir(".")
// 处理错误

for _, file := range files {
    fmt.Printf("%s %04o %s\n", file.Mode(), file.Mode().Perm(), file.Name())
}

示例输出:

-rw-rw-r-- 0664 play.go
drwxrwxr-x 0775 subplay
英文:

Once you have the file mode (with FileInfo.Mode()), use the FileMode.Perm() method. This returns a value of type os.FileMode which has uint32 as its underlying type.

The format you're seeking (e.g. 0777) is in base 8. You can use e.g. fmt.Printf() with the verb %o to print a number in octal format (base 8). Use a width 4 to make it 4 digits, and a flag 0 to make it padded with 0's. So the format string for printing file permissions: "%04o".

So print it like this:

files, err := ioutil.ReadDir(".")
// Handle err

for _, file := range files {
	fmt.Printf("%s %04o %s\n", file.Mode(), file.Mode().Perm(), file.Name())
}

Example output:

-rw-rw-r-- 0664 play.go
drwxrwxr-x 0775 subplay

huangapple
  • 本文由 发表于 2017年1月30日 17:27:23
  • 转载请务必保留本文链接:https://go.coder-hub.com/41932480.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定