通常在读写文件之前,需要判断文件或目录是否存在,不然某些处理方法可能会使程序出错。所以最好在做任何操作之前,先判断文件是否存在。
golang判断文件或文件夹是否存在的方法为使用os.Stat()函数返回的错误值进行判断:
1、如果返回的错误为nil,说明文件或文件夹不存在
2、如果返回的错误类型使用os.IsNotExist()判断为true,说明文件或文件夹存在
3、如果返回的错误为其它类型,则不确定是否在存在
// 判断所给路径文件/文件夹是否存在 func Exists(path string) bool { _, err := os.Stat(path) //os.Stat获取文件信息 if err != nil { if os.IsExist(err) { return true } return false } return true } // 判断所给路径是否为文件夹 func IsDir(path string) bool { s, err := os.Stat(path) if err != nil { return false } return s.IsDir() } // 判断所给路径是否为文件 func IsFile(path string) bool { return !IsDir(path) }
注:
当我们的FileExist返回true时,其实文件并不一定存在。
当我们对目标path中的某一部分没有可读权限时,os.Lstat和syscall.Access同样会返回error,不过这个error不会让os.IsNotExist返回true。
当文件不存在而你对文件所在的目录或者它的上层目录没有访问权限时,FileExist依旧会返回true,bug就在这时发生了。
所以重要的一点是在判断文件是否存在前应该先判断自己对文件及其路径是否有访问权限。
更多golang知识请关注golang教程栏目。
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!