Есть ли способ определить, является ли текущий шаг каталогом? - PullRequest
2 голосов
/ 03 апреля 2019

Мне нужно реализовать клиент sftp, который подключается к хосту, прочитать все доступные файлы в указанной папке, затем проверить, соответствует ли конкретный файл шаблону, и скопировать его в соответствующий локальный каталог.Проблема в том, что я не могу найти способ.

Я пытался использовать client.Walk, но не могу найти способ понять, является ли это каталогом, и пропустить его:

walker := client.Walk(startDir)
for walker.Step() {
    if err := walker.Err(); err != nil {
        fmt.Fprintln(os.Stderr, err)
        continue
    }


    filePath := walker.Path()
}

Как я могу определить, является ли текущая итерация каталогом?

1 Ответ

4 голосов
/ 03 апреля 2019

Вы можете использовать Walker.Stat() для получения информации о самом последнем файле или каталоге, посещенном при вызове Walker.Step(). Он возвращает вам значение типа os.FileInfo, которое имеет метод IsDir().

Например:

for walker.Step() {
    if err := walker.Err(); err != nil {
        fmt.Fprintln(os.Stderr, err)
        continue
    }

    if fi := walker.Stat(); fi.IsDir() {
        continue // Skip dir
    }

    // ...
}
...