创建一个空文本文件

时间:2016-02-22 16:28:29

标签: go io

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

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

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
}

3 个答案:

答案 0 :(得分:30)

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

os.OpenFile(name, os.O_RDONLY|os.O_CREATE, 0666)

答案 1 :(得分:1)

只是尝试改善出色的公认答案。

检查错误并@Entity @Getter @Setter public class Item { // will quarkus use jpa property access // even if I declared field access? @Column(name = "archived") private OffsetDateTime archived; public boolean isArchived() { return archived != null; } } 打开的文件是一个好主意,因为文件描述符是有限的资源。您可能早于GC运行就用完了文件描述符,并且在Windows上您可能会遇到文件共享冲突。

Close()

答案 2 :(得分:0)

OpenFile 函数是执行此操作的最佳方法,但这里有另一种选择:

package main
import "os"

func create(name string) (*os.File, error) {
   _, e := os.Stat(name)
   if e == nil { return nil, os.ErrExist }
   return os.Create(name)
}

func main() {
   f, e := create("file.txt")
   if os.IsExist(e) {
      println("Exist")
   } else if e != nil {
      panic(e)
   }
   f.Close()
}

https://golang.org/pkg/os#ErrExist