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
Ответы
Ответ 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() {
...
}