首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >golang os.Create导致“没有这样的文件或目录”错误

golang os.Create导致“没有这样的文件或目录”错误
EN

Stack Overflow用户
提问于 2017-04-11 10:53:31
回答 2查看 10.3K关注 0票数 5

一定是很简单的东西,但我好像搞不懂。我一直收到“没有这样的文件或目录”的错误。你以为Create函数是用来创建一个新文件的吗?

代码语言:javascript
复制
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)
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-11 11:11:13

你不能使用

或环境变量,如

为了指定文件路径,它们是字符串文字,表示实际路径。你得到的错误是因为它对待

作为当前目录的相对路径,并且没有目录

在当前目录中。

具有手动创建的子目录

,您的代码将会成功:

代码语言:javascript
复制
 ~/test/ mkdir \~
 ~/test/ go run t.go
 ~/test/ ls \~
golang-server.log

所以需要传递一个

或者

..。

票数 5
EN

Stack Overflow用户

发布于 2020-03-03 13:14:59

您可以使用

处理只有在sh/bash上下文中才有意义的"~“。

代码语言:javascript
复制
os.Create(os.ExpandEnv("$HOME/golang-server.log"))

在更复杂的情况下,您需要

确保基目录存在

,因为

不能处理它。

这就是为什么

将失败,因为基目录不存在,并且

不会自动为你创建它。你需要自己这样做:

代码语言:javascript
复制
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中。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43335989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档