2015-10-02 6 views
0

У меня есть код, который просматривает каталог, чтобы получить файлы, чтобы работать с ними, и использует IsDir() для пропуска каталогов. Однако, каталог не правильно обнаружения:FileInfo.IsDir() не обнаруживает каталог

err = filepath.Walk(dir, func(path string, f os.FileInfo, err error) error { 
    if !f.IsDir() { 
     fileList = append(fileList, path) 
    } 
    return nil 
}) 

Ошибка:

Put app/javascripts: read public/app/javascripts: is a directory 

Я на OSX. Вот список каталогов:

[email protected] 6 me staff  204 Sep 25 11:28 javascripts 

Есть ли лучший способ определить каталоги?

+3

- символическая ссылка? – OneOfOne

+0

А ... просто использовал 'f.Mode(). String()', чтобы распечатать его, и это 'Lrwxr-xr-x'. Есть ли хороший способ исключить ссылки, которые являются каталогами? – brandonhilkert

+0

Оказывается, это символическая ссылка. Я смотрел на неправильный каталог: / – brandonhilkert

ответ

1

Я искал неправильный каталог (путаные имена). Это была символическая ссылка, которая имеет смысл.

1

Похоже, что этот файл является каталогом, а также символической ссылкой. Для того, чтобы исключить файлы, которые соответствуют обоим условиям, вы можете использовать:

if !f.IsDir() && (f.Mode()&os.ModeSymlink) != os.ModeSymlink { 
    ... 
}