今天在寫代碼遇到一個問題,如下代碼所示
遇到問題
func Exists() {
getwd, _ := os.Getwd()
fmt.Println(getwd)
_, err := os.Stat(getwd) //os.Stat獲取文件信息
fmt.Println(err) // <nil>
fmt.Println(os.IsExist(err)) // false
fmt.Println(os.IsNotExist(err)) // false
_, err1 := os.Stat("/Users/qxqzx/GoWork/src/go-exam/runtime/logs2") //這個文件夾不存在
fmt.Println(os.IsExist(err1)) // false
fmt.Println(os.IsNotExist(err1)) // true
// 打印結果
///Users/qxqzx/GoWork/src/go-exam
//false
//false
//false
//true
}
關於os.Stat()
在文件夾存在的時候,error返回的是nil,這時候用os.IsExist(err)
和os.IsNotExist(err)
都是false的,所以當文件夾存在即err == nil
時候,不用這兩個方法再次判斷。
當err != nil
的時候,可以直接用os.IsNotExist(err)
或 os.IsExist(err)
方法判斷是否不存在。
科學的判斷方式
golang判斷文件或文件夾是否存在的方法為使用os.Stat()
函數返回的錯誤值進行判斷:
- 如果返回的錯誤為nil,說明文件或文件夾存在
- 如果返回的錯誤類型使用
os.IsNotExist()
或者os.IsExist()
判斷為true,說明文件或文件夾不存在 - 如果返回的錯誤為其它類型,則不確定是否在存在
// 判斷所給路徑文件/文件夾是否存在1
func Exists(path string) bool {
_, err := os.Stat(path) //os.Stat獲取文件信息
if err != nil {
if os.IsExist(err) {
return true
}
return false
}
return true
}
// 判斷所給路徑文件/文件夾是否存在2
func Exists(path string) bool {
_, err := os.Stat(path) //os.Stat獲取文件信息
if err != nil {
if os.IsNotExist(err) {
return false
}
return true
}
return true
}
// 判斷所給路徑文件/文件夾是否存在3 直接用os.IsNotExist(err)
func Exists(path string) bool {
_, err := os.Stat(path) //os.Stat獲取文件信息
if os.IsNotExist(err) {
return false
}
return true
}