Golang 檢查路徑是否存在

Golang 中如何判斷檔案路徑是否存在。

在 python 中有內建函示 os.path.exists 、 os.path.isdir 、 os.path.isdir 可以用來檢查路徑是否存在,不過在 Golang 中沒有那麼方便,需要自己實作。

其中 os.Stat 是關鍵

func Stat(name string) (FileInfo, error)

如果檔案或目錄不存在會回傳 error ,接著可以透過 errors.Is(err, os.ErrNotExist) 來判斷此錯誤是不是因為路徑不存在引發,結果為 true 代表路徑不存在,如果為 false 代表其他錯誤。

如果只是想判斷路徑是否存在,可以寫得精簡一點

// PathExist error == nil 時,true: 路徑存在, false: 路徑不存在
func PathExist(path string) (bool, error) {
	_, err := os.Stat(path)
	if err == nil {
		// 路徑存在
		return true, nil
	}
	if errors.Is(err, os.ErrNotExist) {
		// 路徑不存在
		return false, nil
	}
	// 發生其他錯誤
	return false, err
}

os.Stat 回傳的另一個參數 FileInfo 提供了 IsDir() 方法來讓我們判斷此檔案的類型,如果為 true 代表是目錄,如果為 false 代表是檔案。

完整功能 code

// CheckPath 檢查 PATH 狀態 0: 不存在, 1: 是檔案, 2: 是目錄, -1: 其他錯誤
func CheckPath(path string) (int, error) {
	if fInfo, err := os.Stat(path); err == nil {
		if fInfo.IsDir() {
			// 路徑存在 且為目錄
			return 2, nil
		}
		// 路徑存在 且為檔案
		return 1, nil
	} else if errors.Is(err, os.ErrNotExist) {
		// 路徑不存在
		return 0, err
	} else {
		// 發生其他錯誤
		return -1, err
	}
}

在沒有發生其他錯誤的前提下 (回傳值 != -1)

單純判斷檔案是否存在:
檢查回傳值是否為 0

判斷是否存在外,還想判斷類型:
檢查回傳值為
0: 路徑不存在
1: 此路徑是一個檔案
2: 此路徑是一個目錄

Built with Hugo
Theme Stack designed by Jimmy