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 語言都擁有必要的工具來高效有效地完成任務。

更新於: 2023年2月22日

4K+ 瀏覽量

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.