Golang – 将 uint 转换为 os.FileMode

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

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.

huangapple
  • 本文由 发表于 2015年10月4日 21:25:46
  • 转载请务必保留本文链接:https://go.coder-hub.com/32933980.html
匿名

发表评论

匿名网友

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

确定