驴C贸mo listar un directorio en Go?
Para recorrer la estructura de un directorio en Go, podemos utilizar la funci贸n ReadDir
del paquete ioutil. Dicha funci贸n recibe el path incluyendo el directorio a recorrer, y retorna los nombres de archivos y directorios que este a su vez contenga. Cada uno de los valores retornados contiene:
- Name (el nombre del archivo o directorio).
- Size (tama帽o en bytes).
- Mode (una representaci贸n de los permisos en bits).
- ModTime (la ultima fecha en que el archivo fue modificado).
- IsDir (indica si el archivo es o no un directorio).
- Sys (Informaci贸n subyacente).
Ejemplo de un programa para listar un directorio en Go
Vamos a listar un directorio con el siguiente programa.
package main
import (
"fmt"
"io/ioutil"
"log"
)
func main() {
archivos, err := ioutil.ReadDir(".")
if err != nil {
log.Fatal(err)
}
for _, archivo := range archivos {
fmt.Println("Nombre:", archivo.Name())
fmt.Println("Tama帽o:", archivo.Size())
fmt.Println("Modo:", archivo.Mode())
fmt.Println("Ultima modificaci贸n:", archivo.ModTime())
fmt.Println("Es directorio?:", archivo.IsDir())
fmt.Println("-----------------------------------------")
}
}
Descripci贸n del programa para listar un directorio en Go
Abrimos el directorio mediante ioutil.ReadDir
que recibe el path del directorio a abrir, en este caso el directorio en donde se encuentra el programa.
archivos, err := ioutil.ReadDir(".")
En la variable archivos, tenemos un arreglo que vamos a recorrer mediante un for, este retorna para cada iteraci贸n retorna el indice de la iteraci贸n y los detalles del archivo.
for _, archivo := range archivos
En cada iteraci贸n vamos a imprimir los valores asociados a cada archivo.
fmt.Println("Nombre:", archivo.Name())
fmt.Println("Tama帽o:", archivo.Size())
fmt.Println("Modo:", archivo.Mode())
fmt.Println("Ultima modificaci贸n:", archivo.ModTime())
fmt.Println("Es directorio?:", archivo.IsDir())
Si ejecutamos el programa obtendremos la salida con la informaci贸n de cada archivo.
$ go run main.go
Nombre: 001
Tama帽o: 102
Modo: drwxr-xr-x
Ultima modificaci贸n: 2019-06-13 01:51:54 -0400 EDT
Es directorio?: true
-----------------------------------------
Nombre: archivo1.txt
Tama帽o: 0
Modo: -rw-r--r--
Ultima modificaci贸n: 2019-06-13 01:41:53 -0400 EDT
Es directorio?: false
-----------------------------------------
Nombre: archivo2.txt
Tama帽o: 0
Modo: -rw-r--r--
Ultima modificaci贸n: 2019-06-13 01:41:58 -0400 EDT
Es directorio?: false
-----------------------------------------
Nombre: main.go
Tama帽o: 472
Modo: -rw-r--r--
Ultima modificaci贸n: 2019-06-13 01:50:40 -0400 EDT
Es directorio?: false