Как отличить каталог в списке SFTP, полученном с помощью SharpSSH?

Мне нужно рекурсивно загружать файлы с сервера на SFTP с помощью SharpSsh. Но я не понимаю, как определить, что имя файла или каталог. Теперь я делаю так

 static void recDir(string remotePath, string localPath)
 {
     Sftp _c = this.sftp;
     ArrayList FileList = _c.GetFileList(remotePath);
     FileList.Remove(".");
     FileList.Remove("..");
     for (int i = 0; i < FileList.Count; i++)
     {
         try
         {
             _c.Get(remotePath + "/" + FileList[i], localPath + "/" + FileList[i]);

             Console.WriteLine("File: " + remotePath + "/" + FileList[i]);
         }
         catch (Exception e)
         {
             Console.WriteLine("Dir: " + remotePath + "/" + FileList[i]);
                System.IO.Directory.CreateDirectory(localPath + "/" + FileList[i]);
                recDir(remotePath + "/" + FileList[i], localPath + "/" + FileList[i]);
         }
     }
 }

Работает, но вроде не правильно.


person Alix Reinel    schedule 09.03.2015    source источник
comment
ваш код выглядит так, как будто когда возникло какое-либо исключение, вы попытались выполнить рекурсию, не ясно, где вы хотите рекурсию.   -  person Dhaval Patel    schedule 09.03.2015
comment
Понятия не имею, что это значит: It works, but it seems not correct.   -  person Sam Axe    schedule 09.03.2015
comment
@ Dan-o Я совершенно уверен, что это означает, что ОП пытается создать надежный код, а не код, который просто работает. Использование исключений для обычного потока программы — это вонючее.   -  person C.Evenhuis    schedule 09.03.2015


Ответы (1)


API SharpSSH не позволяет этого. Но вы можете запрограммировать его, поскольку SharpSSH имеет открытый исходный код. Обратите внимание, что SharpSSH — плохой выбор. Его не обслуживают годами.


Смотрите мои ответы на другие похожие вопросы SharpSSH:

Или используйте другую библиотеку SFTP:

  • SSH.NET имеет метод SftpClient.ListDirectory, возвращающий IEnumerable<SftpFile>. SftpFile имеет свойство .IsDirectory
  • сборка WinSCP .NET имеет метод Session.ListDirectory возвращает (через RemoteDirectoryInfo.Files) коллекцию RemoteFileInfo со свойством .IsDirectory
    (я автор сборки WinSCP .NET)
person Martin Prikryl    schedule 09.03.2015