Подтвердить что ты не робот

Golang Определение того, указывает ли файл File на файл или каталог

Есть ли способ определить, указывает ли мой * файл на файл или каталог?

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
4b9b3361

Ответ 1

Например,

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

Примечание:

Пример для Go 1.1. Для Go 1.0 замените case mode.IsRegular(): на case mode&os.ModeType == 0:.

Ответ 2

Вот еще одна возможность:

import "os"

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

Ответ 3

Вот как выполнить тест в одной строке:

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