我一直在阅读和谷歌搜索,但我似乎无法找到这个简单的答案。
我有一个读取文件的函数,但如果文件不存在则会引起恐慌。我想要做的是一个函数,在读取之前,检查文件是否存在,如果不存在,它会创建一个空文件。这就是我所拥有的。
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
}
答案 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()
}