2012-01-11 9 views
20

¿Hay alguna forma de determinar si mi * Archivo apunta a un archivo o a un directorio?Golang Determinando si * El archivo apunta a un archivo o directorio

fileOrDir, err := os.Open(name) 
// How do I know whether I have a file or directory? 

Quiero ser capaz de leer las estadísticas sobre el archivo si es sólo un archivo, y ser capaz de leer los archivos en el directorio si es un directorio

fileOrDir.Readdirnames(0) // If dir 
os.Stat(name) // If file 

Respuesta

29

Por ejemplo,

package main 

import (
    "fmt" 
    "os" 
) 

func main() { 
    name := "FileOrDir" 
    fi, err := os.Stat(name) 
    if err != nil { 
     fmt.Println(err) 
     return 
    } 
    switch mode := fi.Mode(); { 
    case mode.IsDir(): 
     // do directory stuff 
     fmt.Println("directory") 
    case mode.IsRegular(): 
     // do file stuff 
     fmt.Println("file") 
    } 
} 

Nota:

El ejemplo es para Go 1.1. Para Go 1.0, reemplace case mode.IsRegular(): con case mode&os.ModeType == 0:.

25

Aquí es otra posibilidad:

import "os" 

func IsDirectory(path string) (bool, error) { 
    fileInfo, err := os.Stat(path) 
    return fileInfo.IsDir(), err 
} 
+4

tenga cuidado: directorio tiene que existir – davidhq

7

Aquí es cómo hacer la prueba en una línea:

if info, err := os.Stat(path); err == nil && info.IsDir() { 
     ... 
    } 
Cuestiones relacionadas