文件权限处理

在go中,使用os.Chmod(filename,filemod)需要传入的是要变更权限的文件名和要变更的权限,
也就类似于linux中的chmod

一开始我以为的是只要在后面权限参数上写上二进制的权限制就行,后来发现是不行的,需要进行转换
得益于https://www.jianshu.com/p/216cb89c4d81

得知:777通过转换并不能成为 -rwxrwxrwx,
这是因为外部传入的是十进制777

package main

import (
    "fmt"
    "os"
)

func main() {
    fmt.Println(os.FileMode(777), 777)
    fmt.Println(os.FileMode(0777), 0777)
}

输出结果:
-r----x--x 777
-rwxrwxrwx 511

正确使用os.FileMode()时,应该先将777 先看成八进制,然后转成十进制值,传入os.FileMode中,转换方法如下

mode := 777
um, _ := strconv.ParseInt(strconv.Itoa(mode), 8, 0)

// 完整测试代码
package main

import (
    "fmt"
    "os"
    "strconv"
)

func main() {
    um, _ := strconv.ParseInt(strconv.Itoa(777), 8, 0)
    fmt.Println(os.FileMode(777), 777)
    fmt.Println(os.FileMode(0777), 0777)
    fmt.Println(os.FileMode(um), um)
}

输出:
-r----x--x 777
-rwxrwxrwx 511
-rwxrwxrwx 511

使用filemod

接受外部传入的参数mod
	perm, _ := strconv.ParseInt(mod, 8, 0)
	per := os.FileMode(perm)
	err2 := os.Chmod(dest, per)
	if err2 == nil {
		return
posted @ 2019-09-07 17:27  π=3.1415926  阅读(277)  评论(0编辑  收藏  举报