请教个问题,没搜到类似情况的。
调用 os.Create 或者 os.WriteFile ,文件名是一个绝对路径,调用前 后边几级目录还没创建,按官方的例子,会自动创建目录,实际使用会报错:
no such file or directory
调用前加了syscall.Umask(0)
,对新创建文件的权限,取消了掩码限制
绝对路径类似于 /Users/admin/xxx/blog/content/zh-CN/post/filedir/test
已有目录 /Users/admin/xxx/blog/content/zh-CN/post 的权限也是 3 个 rwx ,自己在 shell 操作创建也是没问题。
因为拼接的路径,后边几级目录不确定,不至于每次创建一级,就调用个 os.Chmod 吧。。。
官方文档 func WriteFile(name string, data []byte, perm FileMode) error
WriteFile writes data to the named file, creating it if necessary. If the file does not exist, WriteFile creates it with permissions perm (before umask); otherwise WriteFile truncates it before writing, without changing permissions.
err := os.WriteFile("testdata/hello", []byte("Hello, Gophers!"), 0666)
if err != nil {
log.Fatal(err)
}
1
keepeye 2022-09-17 14:28:46 +08:00
只会自动创建文件吧,目录需要你自己创建或者 os.MkdirAll
|
3
wtfedc OP @keepeye 在 windows 也跑了一下,同样报错。可能我理解错了,不能使用 WriteFile 创建文件夹。官方给的个例子真的不怎么好,一个跑不通的例子,算了,转身去用 MkdirAll 了
|
4
keepeye 2022-09-17 14:41:34 +08:00
官方的例子让你知道不会帮你创建目录,你点下 run 就知道了啊,create file 不是 create dir
|
5
keepeye 2022-09-17 14:44:11 +08:00 1
你再点开 WriteFile 源码,所谓的自动创建文件就是 open 操作的时候使用了 O_CREAT mode
OpenFile(name, O_WRONLY|O_CREATE|O_TRUNC, perm) |
6
keepeye 2022-09-17 14:46:06 +08:00
可以参考下 touch 命令,也会报同样的错误
touch: cannot touch 'a/b.txt': No such file or directory |