2012-01-11 51 views
20

有没有方法可以确定我的*文件是指向文件还是目录?Golang确定*文件是指向文件还是目录

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

我希望能够读取统计数据有关的文件,如果它只是一个文件,并能够在目录中读取文件,如果它是一个目录

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

回答

29

例如,

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") 
    } 
} 

注:

的例子是围棋1.1。对于Go 1.0,请将case mode.IsRegular():替换为case mode&os.ModeType == 0:

25

这里是另一种可能性:

import "os" 

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

小心:目录必须存在 – davidhq 2015-06-08 17:57:59

7

这里是如何做测试在同一行:

if info, err := os.Stat(path); err == nil && info.IsDir() { 
     ... 
    } 
相关问题