一定是很简单的东西,但我好像搞不懂。我一直收到“没有这样的文件或目录”的错误。你以为Create函数是用来创建一个新文件的吗?
package main
import (
"log"
"os"
)
func main() {
f, err := os.Create("~/golang-server.log")
defer f.Close()
if err != nil {
panic(err.Error())
}
log.SetOutput(f)
}发布于 2017-04-11 11:11:13
你不能使用
或环境变量,如
为了指定文件路径,它们是字符串文字,表示实际路径。你得到的错误是因为它对待
作为当前目录的相对路径,并且没有目录
在当前目录中。
具有手动创建的子目录
,您的代码将会成功:
~/test/ mkdir \~
~/test/ go run t.go
~/test/ ls \~
golang-server.log所以需要传递一个
或者
至
..。
发布于 2020-03-03 13:14:59
您可以使用
处理只有在sh/bash上下文中才有意义的"~“。
os.Create(os.ExpandEnv("$HOME/golang-server.log"))在更复杂的情况下,您需要
确保基目录存在
,因为
不能处理它。
这就是为什么
将失败,因为基目录不存在,并且
不会自动为你创建它。你需要自己这样做:
func EnsureBaseDir(fpath string) error {
baseDir := path.Dir(fpath)
info, err := os.Stat(baseDir)
if err == nil && info.IsDir() {
return nil
}
return os.MkdirAll(baseDir, 0755)
}注意:
并不总是存在的,例如程序作为系统级运行
服务。所以你最好不要使用
在生产环境中。
的局限性
并不只存在于Go中。它是由操作系统内核引起的,并且广泛存在于其他语言/stdlib中。
https://stackoverflow.com/questions/43335989
复制相似问题