亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

文件在 Go 中既存在又不存在?

文件在 Go 中既存在又不存在?

Go
料青山看我應如是 2021-08-16 19:19:13
這個 Go 程序說文件不存在也不存在有什么原因嗎?大概是其中之一吧?package mainimport (    "fmt"    "log"    "os"    "path/filepath")func main() {    for _, fn := range os.Args[1:] {        src, _ := filepath.Abs(fn)        fmt.Println(fn)        fmt.Println(src)        if _, e := os.Stat(src); os.IsExist(e) {            log.Fatalf("Does exist: %s", src)        }        if _, e := os.Stat(src); os.IsNotExist(e) {            log.Fatalf("Does not exist: %s", src)        }    }}
查看完整描述

3 回答

?
慕哥9229398

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 的目的是創建一個文件,所以文件丟失永遠不會出錯。


查看完整回答
反對 回復 2021-08-16
?
絕地無雙

TA貢獻1946條經驗 獲得超4個贊

如果文件存在,某些功能將失敗。這種系統調用返回的錯誤將滿足os.IsExist(). 一個這樣的系統調用是os.OpenFile()帶有標志O_CREATO_EXCL。如果文件不存在,其他函數會失敗,比如os.OpenFile沒有O_CREAT標志。這種系統調用返回的錯誤將滿足os.IsNotExist(). 該nil錯誤既不滿足os.IsExist(),并os.IsNotExist()因為它不是一個失敗的情況。

在您的示例中,os.Stat()如果您嘗試統計的文件不存在,則該函數可能會失敗。如果文件存在,它也可能失敗,但不是因為文件存在的原因。因此,os.IsExist(e)將始終falseos.Stat()函數產生的錯誤讓步。


查看完整回答
反對 回復 2021-08-16
?
繁花不似錦

TA貢獻1851條經驗 獲得超4個贊

檢查文件是否存在的最佳方法(其中 src = 文件路徑):


if _, err := os.Stat(src); err == nil || os.IsExist(err) {

    // your code here if file exists

}


查看完整回答
反對 回復 2021-08-16
  • 3 回答
  • 0 關注
  • 401 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號