如何区分使用 SharpSSH 检索的 SFTP 列表中的目录?

How to distinguish a directory in SFTP listing retrieved using SharpSSH?

我需要通过 SharpSsh 从服务器递归下载文件到 SFTP。但我不明白如何确定文件名或目录。 现在我这样做了

 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]);
         }
     }
 }

有效,但似乎不正确。

SharpSSH API 不允许这样做。但是您可以对其进行编码,因为 SharpSSH 是开源的。请注意,虽然 SharpSSH 是一个糟糕的选择。它没有维护多年。


查看我对另一个类似 SharpSSH 问题的回答:

  • Download file based on date modified from SFTP.
  • Get file size from SFTP using SharpSSH.

或者使用另一个 SFTP 库:

  • SSH.NET 具有返回 IEnumerable<SftpFile> 的方法 SftpClient.ListDirectorySftpFile.IsDirectory 属性
  • WinSCP .NET assembly has the method Session.ListDirectory returning (via the RemoteDirectoryInfo.Files) a collection of the RemoteFileInfo 与 属性 .IsDirectory
    (我是 WinSCP .NET 程序集的作者)