这个 Go 程序说文件既不存在也不不存在有什么原因吗?大概是其中之一?
package main
import (
"fmt"
"log"
"os"
"path/filepath"
)
func main() {
for _, fn := range os.Args[1:] {
src, _ := filepath.Abs(fn)
fmt.Println(fn)
fmt.Println(src)
if _, e := os.Stat(src); os.IsExist(e) {
log.Fatalf("Does exist: %s", src)
}
if _, e := os.Stat(src); os.IsNotExist(e) {
log.Fatalf("Does not exist: %s", src)
}
}
}
最佳答案
os.IsExist 和 os.IsNotExist 函数不会测试相反的条件,即使名称似乎暗示它们会测试。
函数os.IsExist由于文件已存在而导致操作失败时返回 true。函数os.IsNotExist由于文件不存在而导致操作失败时返回 true。
函数 os.Stat 总是返回 os.IsExist(err) == false 的错误。 os.Stat 函数永远不会失败,因为文件存在。
带有 O_CREAT 的函数 os.OpenFile 总是返回错误 os.IsNotExist(err) == false。因为带有 O_CREAT 的 os.OpenFile 的目的是创建文件,所以文件丢失绝不是错误。
关于文件在 Go 中既存在又不存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25939584/