英文:
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
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论