Go語言程式:獲取目錄下所有檔案


Go語言擁有`os`包,例如`os.Open()`、`os.Close()`、`os.Copy()`和`os.Rename()`等函式,用於執行不同的外部檔案操作。類似地,Go語言也擁有`io`包,用於執行外部檔案的讀寫操作。本文將使用這兩個包來列印給定目錄中的所有檔案。

方法一:使用`os`包

此程式開啟提供的目錄並使用`os`包讀取其內容。`Readdir`函式返回一個`os.FileInfo`物件的切片,其中包含有關目錄中每個檔案的詳細資訊。`Name`方法返回檔名後,程式會列印該檔名。

語法

Os.Open()

此函式是`os`包的一部分,用於開啟檔案以進行讀取。它接受一個輸入,即要開啟的檔名。

演算法

  • 步驟 1 − 建立`main`包並宣告`fmt`(格式化包)、`os`包。`main`包生成可執行程式碼,`fmt`包幫助格式化輸入和輸出。

  • 步驟 2 − 將要訪問檔案的目錄分配給變數。

  • 步驟 3 − 使用`os.Open`函式開啟目錄。

  • 步驟 4 − 如果開啟目錄時出現任何錯誤,則列印錯誤語句並返回。

  • 步驟 5 − 使用`defer`關鍵字和`Close`函式關閉已開啟的檔案。

  • 步驟 6 − 然後,使用`Readdir`函式讀取目錄,如果讀取目錄時出現錯誤,則列印錯誤語句並返回。

  • 步驟 7 − 迴圈遍歷從目錄讀取的檔案,並使用`fmt.Println()`將它們列印到控制檯。

示例

在此示例中,我們將使用`Readdir`讀取目錄以列印檔案。

package main
import (
   "fmt"
   "os"
)

func main() {
   directory := "./" // The current directory

   files, err := os.Open(directory) //open the directory to read files in the directory
   if err != nil {
      fmt.Println("error opening directory:", err) //print error if directory is not opened
      return
   }
   defer files.Close()    //close the directory opened

   fileInfos, err := files.Readdir(-1)  //read the files from the directory
   if err != nil {
      fmt.Println("error reading directory:", err)  //if directory is not read properly print error message
      return
   }
   for _, fileInfos := range fileInfos {
      fmt.Println(fileInfos.Name()) //print the files from directory
   }
}

輸出

.cache
main.go

方法二:使用`io/ioutil`包

此方法使用`ioutil`包中的`ReadDir`函式讀取目錄的內容,它返回一個`os.FileInfo`物件的切片。然後,程式遍歷該切片,並像前面的示例一樣,使用`Name`方法列印每個檔案的檔名。

語法

Ioutil.ReadDir()

此函式在`ioutil`包中可用,用於讀取當前工作檔案所在的目錄。它只有一個引數,即當前目錄位置。

演算法

  • 步驟 1 − 建立`main`包並宣告`fmt`(格式化包)、`io/ioutil`包。`main`包生成可執行程式碼,`fmt`包幫助格式化輸入和輸出。

  • 步驟 2 − 建立一個目錄變數,併為其指定要訪問檔案的目錄。

  • 步驟 3 − 使用`ioutil`包中的`ReadDir`函式讀取目錄中的檔案。

  • 步驟 4 − 如果讀取目錄中的檔案時出現錯誤,則列印錯誤並返回。

  • 步驟 5 − 如果沒有錯誤,則使用`fmt.Println()`列印目錄的檔案。

示例

在此示例中,我們將使用`io/ioutil`包的`ioutil.ReadDir`函式來獲取目錄中存在的檔案。

package main
import (
   "fmt"
   "io/ioutil"
)

func main() {
   directory := "./" // The current directory

   files, err := ioutil.ReadDir(directory) //read the files from the directory
   if err != nil {
      fmt.Println("error reading directory:", err) //print error if directory is not read properly
      return
   }
   for _, file := range files {
      fmt.Println(file.Name()) //print the files from the directory
   }
}

輸出

.cache
main.go

結論

我們使用兩個示例執行了獲取目錄中所有檔案的程式。在第一個示例中,我們將使用`os`包函式;在第二個示例中,我們將使用`io/ioutil`包函式來執行程式。

更新於:2023年2月22日

2K+ 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.