2020年9月18日 星期五

Golang filepath.Walk 行為及注意事項

某些情況下我們需要去解析目錄下含子目錄共有多少檔案,一般來說是使用遞迴,不同程式語言有不同的名稱,可能叫 parseDir 或是 walkThrough 等。

Golang 在 path/filepath 這個 package 裡面就有提供類似的功能,其用法為 filepath.Walk,我們需要傳入 2 個參數:

1. 要解析的目錄名稱。

2. WalkFunc 型式的函數,定義如下。

type WalkFunc func(path string, info os.FileInfo, err error) error

比較特別的是,我們在裡面不需要再寫出類似遞迴呼叫的語法,Golang 本身會一直呼叫我們傳進去的 WalkFunc 直到結束。

另外,也可以傳入 UNC 路徑,這邊要注意一點,由於微軟檔案長度 255 字元的限制,如果我們傳入的路徑裡面有超出長度的檔案,此時會回傳 error,故後面就會停止 parsing,錯誤訊息如下。

CreateFile ERROR_FILE_NAME: The system cannot find the path specified.

因此,如果我們還是要繼續 parsing,可以選擇忽略這個錯誤而直接回傳 nil。

沒有留言:

張貼留言