1 回答

TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超8個(gè)贊
目錄是否為空不會(huì)作為名稱、創(chuàng)建時(shí)間或大?。ㄈ绻俏募┑葘傩源鎯?chǔ)在文件系統(tǒng)級(jí)別。
話雖如此,您不能僅從os.FileInfo. 最簡(jiǎn)單的方法是查詢目錄的子項(xiàng)(內(nèi)容)。
ioutil.ReadDir()這是一個(gè)非常糟糕的選擇,因?yàn)樗紫茸x取指定目錄的所有內(nèi)容,然后按名稱對(duì)它們進(jìn)行排序,然后返回切片。最快的方法是 Dave C 提到的:使用File.Readdir()or (最好)查詢目錄的子級(jí)File.Readdirnames()。
二者File.Readdir()并File.Readdirnames()采取其用于限制返回值的數(shù)量的參數(shù)。僅查詢 1 個(gè)孩子就足夠了。由于Readdirnames()僅返回名稱,因此速度更快,因?yàn)椴恍枰M(jìn)一步調(diào)用來獲?。ê蜆?gòu)造)FileInfo結(jié)構(gòu)。
請(qǐng)注意,如果目錄為空,io.EOF則作為錯(cuò)誤返回(而不是空或nil切片),因此我們甚至不需要返回的名稱切片。
最終代碼可能如下所示:
func IsEmpty(name string) (bool, error) {
f, err := os.Open(name)
if err != nil {
return false, err
}
defer f.Close()
_, err = f.Readdirnames(1) // Or f.Readdir(1)
if err == io.EOF {
return true, nil
}
return false, err // Either not empty or error, suits both cases
}
- 1 回答
- 0 關(guān)注
- 248 瀏覽
添加回答
舉報(bào)