英文:
Golang - Converting uint to os.FileMode
问题
我正在尝试从用户那里获取一个表示文件权限的字符串,并将其转换为os.FileMode
类型。
所以,当我获取到权限"0644"
并进行转换后,它变成了644
。我将其作为参数传递给ioutil.WriteFile
函数。
这是我的代码:
data["perm"] = "0644"
tempval, err2 = strconv.ParseUint(data["Perm"], 10, 32)
// tempval 的值是 644
但是我没有得到正确的权限。
我得到的是 --w----r--
而不是 -rw-r--r--
。
我一直在尝试找到解决方法。
那么,我应该如何实现这个目标呢?
英文:
I'm trying to get user permissions for a file from the user as a string and convert it into type os.FileMode
.
So, after I get the permission "0644"
and convert it, it becomes 644
. I am using this as a parameter to ioutil.WriteFile
.
This is what I'm doing.
data["perm"] = "0644"
tempval, err2 = strconv.ParseUint(data["Perm"], 10, 32)
// tempval is 644
I'm not getting the right permissions.
I get --w----r--
instead of -rw-r--r--
I've been trying to find a workaround.
So, how exactly do I achieve this?
答案1
得分: 9
tempval, err2 = strconv.ParseUint(data["Perm"], 10, 32)
你在这里明确要求使用十进制。如果你想要八进制(这是Unix文件模式的传统进制),那么你需要在第二个参数中使用8
。或者更好的办法是使用基数0
,它会自动选择八进制,因为有前导的0。请参考strconv.ParseInt
的文档,了解"基数0"的工作原理。
英文:
tempval, err2 = strconv.ParseUint(data["Perm"], 10, 32)
You're explicitly asking for base 10 here. If you want base 8 (which is the traditional base for unix file modes), then you need to use 8
in the second parameter. Or better, use base 0
, and it'll automatically choose base 8 due to the leading 0. See the docs on strconv.ParseInt
for how "base 0" works.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论