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`包函式來執行程式。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP