3 回答
TA贡献1877条经验 获得超6个赞
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。因为 os.OpenFile 和 O_CREAT 的目的是创建一个文件,所以文件丢失永远不会出错。
TA贡献1946条经验 获得超4个赞
如果文件存在,某些功能将失败。这种系统调用返回的错误将满足os.IsExist()
. 一个这样的系统调用是os.OpenFile()
带有标志O_CREAT
和O_EXCL
。如果文件不存在,其他函数会失败,比如os.OpenFile
没有O_CREAT
标志。这种系统调用返回的错误将满足os.IsNotExist()
. 该nil
错误既不满足os.IsExist()
,并os.IsNotExist()
因为它不是一个失败的情况。
在您的示例中,os.Stat()
如果您尝试统计的文件不存在,则该函数可能会失败。如果文件存在,它也可能失败,但不是因为文件存在的原因。因此,os.IsExist(e)
将始终false
为os.Stat()
函数产生的错误让步。
TA贡献1851条经验 获得超4个赞
检查文件是否存在的最佳方法(其中 src = 文件路径):
if _, err := os.Stat(src); err == nil || os.IsExist(err) {
// your code here if file exists
}
- 3 回答
- 0 关注
- 305 浏览
添加回答
举报