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+ 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告