【发布时间】:2022-01-24 15:19:00
【问题描述】:
我正在像这样的单元测试中创建一个目录:
// The directory which is going to be created next to unit test executable.
const DirName string = "test-files"
创建目录:
// Create the directory if doesn't already exist.
err := os.MkdirAll(DirName, os.ModeDir)
if err != nil {
return err
}
// Compose a sample file path to double-check its existence.
pth := DirName + string(os.PathSeparator) + "samplefile.txt"
exists, err := doesExist(pth)
if err != nil {
return err
}
并检查文件是否存在:
// Does file exist?
func doesExist(pth string) (bool, error) {
// Check file existence
// https://stackoverflow.com/a/10510718/3405291
if _, err := os.Stat(pth); err != nil {
if os.IsNotExist(err) {
return false, nil
} else {
return true, err
}
}
// Above conditions are skipped,
// therefore file exists.
return true, nil
}
以上代码返回此错误:
os.Stat: 权限被拒绝
错误(syscall.Errno)EACCES(13)
我可以再次检查该目录是否已实际创建。但是权限是d---------:
> ls -lh
d--------- 2 m3 users 6 Dec 23 20:30 test-files
如何创建具有适当权限的目录?
【问题讨论】:
-
您可以使用 os.Mkdir 来设置权限。
-
MkDir已经在创建目录,您不需要设置目录模式位。但是,您确实需要设置正确的权限才能访问该目录。 -
@Spoofed
os.MkdirAll有权限参数吗? -
你知道
umask吗?它可能在这里介入。当我们这样做时,请考虑使用path/filepath.Join而不是使用+来搞乱字符串连接。
标签: go