创建一个空文本文件

Cop*_*lio 11 io go

我一直在阅读和谷歌搜索,但我似乎无法找到这个简单的答案.

我有一个读取文件的函数,但如果文件不存在则会引起恐慌.我想要做的是一个函数,在读取之前,检查文件是否存在,如果不存在,它会创建一个空文件.这就是我所拥有的.

func exists(path string) (bool, error) {
    _, err := os.Stat(path)
    if err == nil {
        return true, nil
    }
    if os.IsNotExist(err) {
        return false, nil
    }
    return true, err
}
Run Code Online (Sandbox Code Playgroud)

Jim*_*imB 37

不要先尝试检查是否存在,因为如果同时创建文件,则会有竞争.如果文件O_CREATE不存在,您可以使用该标志打开该文件以创建它:

os.OpenFile(name, os.O_RDONLY|os.O_CREATE, 0666)
Run Code Online (Sandbox Code Playgroud)

  • 这不会泄漏文件描述符吗? (2认同)
  • 啊,没关系,根据 /sf/answers/601685521/ 它们会自动关闭。 (2认同)

rus*_*tyx 5

只是试图改进优秀的公认答案。

检查错误和Close()打开的文件是一个好主意,因为文件描述符是一种有限的资源。您可能会比 GC 运行更快地耗尽文件描述符,并且在 Windows 上您可能会遇到文件共享冲突。

func TouchFile(name string) error {
    file, err := os.OpenFile(name, os.O_RDONLY|os.O_CREATE, 0644)
    if err != nil {
        return err
    }
    return file.Close()
}
Run Code Online (Sandbox Code Playgroud)