判斷一個檔案是否存在是一個相當常見的需求,在golang中也有多種方案實現這項功能。
跨平台實作
跨平台實現的想法很簡單,如果某個檔案不存在,那麼使用os.Lstat就一定會回傳error,只要判斷error是否代表文件不存在即可。
也許你注意到了有些程式碼會使用os.Open來完成上述工作,不過最好不要這麼做,因為雖然兩者完成的功能沒有區別,但open和stat的呼叫開銷是不同的,後者要小於前者,而且對於判斷檔案是否存在,檢查它的元資料要比直接嘗試開啟它更合理。
那麼來看看實作的程式碼:
func FileExist(path string) bool { _, err := os.Lstat(path) return !os.IsNotExist(err) }
POSIX平台實作
如果你的程式是針對POSIX平台的(例如UNIX、Linux等),那麼還有更簡單的方案-syscall.Access。
syscall.Access提供了使用者檢查檔案元資訊的手段,通常它被用來檢查檔案權限以及檔案的存在性。
透過使用syscall.F_OK標誌檢查文件,如果不存在則會返回和os.Lstat一樣的error:
func FileExist(path string) bool { err := syscall.Access(path, syscall.F_OK) return !os.IsNotExist(err) }
這種實現的最大優勢在於它簡單而直觀,但是它無法在Windows上使用。
更多golang知識請關注PHP中文網golang教學欄位。
以上是golang讀取文件是否存在的詳細內容。更多資訊請關注PHP中文網其他相關文章!