Go語言程式獲取指定目錄下的所有檔名列表
在 Go 語言中,我們有兩個內建函式 - ReadDir() 和 Walk 函式,用於獲取特定目錄中存在的檔名列表。這裡我們編寫了三個示例。在第一個示例中,我們將使用 ioutil 包中的 ReadDir() 函式,而在第二個示例中,我們將使用 filepath 包中的 Walk 函式。
方法 1:使用 ioutil 包
Go 語言中的 ioutil 包提供了幾個用於執行輸入/輸出操作的函式,包括讀取檔案和目錄。ioutil 包的 ReadDir() 函式用於獲取指定目錄中的檔案列表。
語法
func ReadDir(dirname string) ([]os.FileInfo, error)
ReadDir() 函式以目錄名作為引數,並返回一個 os.FileInfo 切片以及一個錯誤(如果有)。os.FileInfo 介面提供有關檔案或目錄的資訊,包括其名稱、大小和時間戳。
演算法
在您的 Go 程式中匯入 ioutil 包。
呼叫 ioutil.ReadDir() 函式,並將目錄路徑作為引數傳遞。
ReadDir() 函式返回一個 os.FileInfo 物件的切片,每個物件代表指定目錄中的一個檔案或目錄。
迴圈遍歷 os.FileInfo 物件的切片,並列印檔名稱。
示例
在本示例中,我們將使用 Go 語言的 ioutil 包來獲取指定目錄中的所有檔名列表。
package main
import (
"fmt"
"io/ioutil"
)
func main() {
files, err := ioutil.ReadDir(".")
if err != nil {
fmt.Println("Error:", err)
return
}
for _, file := range files {
fmt.Println(file.Name())
}
}
輸出
.cache main.go
方法 2:使用 os 包
Go 語言中的 os 包提供了幾個用於執行作業系統操作的函式,包括讀取檔案和目錄。os 包的 Readdir() 函式用於獲取指定目錄中的檔案列表。
語法
func Readdir(dirname string) ([]os.FileInfo, error)
Readdir() 函式以目錄名作為引數,並返回一個 os.FileInfo 切片以及一個錯誤(如果有)。
演算法
在您的 Go 程式中匯入 fmt 和 os 包。
呼叫 os.Open() 函式,並將目錄路徑作為引數傳遞。
Open() 函式返回一個指向 os.File 物件的指標,該物件代表開啟的目錄。
在 os.File 物件上呼叫 Readdir() 函式,該函式返回一個 os.FileInfo 物件的切片,每個物件代表指定目錄中的一個檔案或目錄。
迴圈遍歷 os.FileInfo 物件的切片,並列印檔名稱。
示例
在本示例中,我們使用 os.Open() 函式開啟當前目錄(用 "." 表示),並使用 os.File.Readdir() 方法獲取檔案列表。然後迴圈遍歷返回的 os.FileInfo 切片,並使用每個 os.FileInfo 的 Name() 方法列印檔名。
package main
import (
"fmt"
"os"
)
func main() {
dir, err := os.Open(".")
if err != nil {
fmt.Println("Error:", err)
return
}
defer dir.Close()
files, err := dir.Readdir(-1)
if err != nil {
fmt.Println("Error:", err)
return
}
for _, file := range files {
fmt.Println(file.Name())
}
}
輸出
.cache main.go
方法 3:使用 Filepath 包
Go 語言中的 filepath 包提供了幾個用於執行與檔案路徑相關的操作的函式,包括讀取檔案和目錄。filepath 包的 Walk() 函式用於獲取指定目錄中的檔案列表。
語法
func Walk(root string, walkFn WalkFunc) error
Walk() 函式以根目錄名和回撥函式 (WalkFunc) 作為引數。WalkFunc 函式在以 root 為根的樹中的每個檔案或目錄(包括 root 本身)上都被呼叫。WalkFunc 的錯誤返回值會向上傳播到呼叫鏈中。
演算法
在您的 Go 程式中匯入 filepath 和 fmt 包。
定義一個 filepath.WalkFunc 型別的回撥函式,該函式在以 root 為根的樹中的每個檔案或目錄(包括 root 本身)上都被呼叫。
呼叫 filepath.Walk() 函式,並將根目錄名和回撥函式作為引數傳遞。
Walk() 函式遍歷以 root 為根的樹,為樹中的每個檔案或目錄呼叫回撥函式。
在回撥函式中,如果它們不是目錄,則列印檔名稱。
WalkFunc 的錯誤返回值會向上傳播到呼叫鏈中。檢查 Walk() 函式期間可能發生的任何錯誤。
示例
在本示例中,我們使用 filepath.Walk() 函式遍歷當前目錄(用 "." 表示)。回撥函式在樹中的每個檔案和目錄上都被呼叫,並且只打印檔名稱。
package main
import (
"fmt"
"path/filepath"
"os"
)
func main() {
err := filepath.Walk(".", func(path string, info os.FileInfo, err error) error {
if !info.IsDir() {
fmt.Println(info.Name())
}
return nil
})
if err != nil {
fmt.Println("Error:", err)
return
}
}
輸出
0e2b514f755ee4f625d64cbbd7c2105ede7801c584c4b7c84ab92a6bba8bead3-a 488f59492c5d2acb89df6f7dd4adeb489e794f4c7f4b7099b1ce8bfd4bb76555-d 491a6fde5177b15e27e5483d63c5275ef3fb4d1160e2f0250593f0500e3ffa42-d README c1e4b74d07dece466552274a8aaf6ea8cbe8b38326ab63779edc68c311125873-a e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855-d ef52495a5cadbbe9f3a90c71303222f26f455e79cdb1e4a5bd23c6d0fd037dfa-a f93942f3d6be608e81b2d3c28c3ed57f5c78c1367b8844742d977252fc2921e2-a main.go
結論
總之,Go 語言提供了多種方法來獲取指定目錄中的檔名列表,包括使用 ioutil 包、os 包和 filepath 包。每種方法都有自己的語法、用例和演算法,方法的選擇取決於特定任務的要求。無論您需要執行簡單的目錄列表還是遍歷整個目錄樹,Go 語言都擁有必要的工具來高效有效地完成任務。
資料結構
網路
關係型資料庫
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP