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 關注
- 401 瀏覽
添加回答
舉報
