判断一个文件是否存在是一个相当常见的需求,在golang中也有多种方案实现这一功能。

现在我们介绍其中两种最常用也是最简单的实现,第一种将是跨平台通用的,而第二种则在POSIX平台上通用。

跨平台实现

os.Lstat
os.Open

那么来看看实现的代码:

func FileExist(path string) bool {
  _, err := os.Lstat(path)
  return !os.IsNotExist(err)
}

代码很简单,对于Windows/Linux/MacOS等是通用的,一般没有特殊需求我也比较推荐这种实现。

POSIX平台实现

syscall.Access
syscall.Access
syscall.F_OKos.Lstat
func FileExist(path string) bool {
  err := syscall.Access(path, syscall.F_OK)
  return !os.IsNotExist(err)
}

这种实现的最大优势在于它简单而直观,但是它无法在Windows上使用。

一点提示

FileExist
os.Lstatsyscall.Accessos.IsNotExist
FileExist

所以重要的一点是在判断文件是否存在前应该先判断自己对文件及其路径是否有访问权限。