2012-01-11 38 views
20

Có cách nào để xác định xem tệp * của tôi có trỏ đến tệp hoặc thư mục không?Golang Xác định xem * Tập tin trỏ vào tập tin hoặc thư mục

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

Tôi muốn để có thể đọc số liệu thống kê về các tập tin nếu nó chỉ là một tập tin, và có khả năng đọc các tập tin trong thư mục nếu nó là một thư mục

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

Trả lời

29

Ví dụ,

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

Lưu ý:

Các ví dụ là cho Go 1.1. Đối với Go 1.0, thay thế case mode.IsRegular(): bằng case mode&os.ModeType == 0:.

25

Dưới đây là một khả năng:

import "os" 

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

hãy cẩn thận: thư mục có tồn tại – davidhq

7

Dưới đây là làm thế nào để làm bài kiểm tra trong một dòng:

if info, err := os.Stat(path); err == nil && info.IsDir() { 
     ... 
    } 
Các vấn đề liên quan