Go中对文件的访问是由 os包提供的。当文件不存在时,这个包的函数会返回 os.ErrNotExist错误。因此,为了验证文件是否存在,你需要检查是否收到这个错误,例如,在打开文件后,当你想对它做一些事情时,如读取前100字节。
package main
import (
"errors"
"fmt"
"log"
"os"
)
func read100Bytes(path string) ([]byte, error) {
file, err := os.Open(path)
if errors.Is(err, os.ErrNotExist) {
return nil, errors.New("file not exists error")
}
data := make([]byte, 100)
_, err = file.Read(data)
return data, err
}
func main() {
path := "/foo/bar/file.go"
data, err := read100Bytes(path)
if err != nil {
log.Fatal(err)
}
fmt.Println(string(data))
}
输出。
2021/08/05 18:30:46 file not exists error
exit status 1
也可以在不做任何处理的情况下检查一个文件是否存在,但请记住,如果你以后想对它做什么,比如打开它,你也应该检查它的存在,因为它可能在这期间被修改或删除了。
package main
import (
"errors"
"fmt"
"os"
)
func exists(path string) bool {
_, err := os.Stat(path)
return !errors.Is(err, os.ErrNotExist)
}
func main() {
path := "/foo/bar/file.go"
fileExists := exists(path)
fmt.Printf("%s exists: %t\n", path, fileExists)
}
输出。
/foo/bar/file.go exists: false