2012-01-11 196 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() { 
     ... 
    } 
相關問題