【问题标题】:Check if file exist on SFTP remote server检查 SFTP 远程服务器上是否存在文件
【发布时间】:2012-06-13 07:41:05
【问题描述】:

以下代码会将名为file.txt 的文件从SFTP remote server 向下移动到local machine

 sftp.Get("/usr/mine/file.txt" , "C:/Folder/");

我想要做的是检查文件file.txt 是否存在于remote server 中。我该怎么做这个检查。帮助

我正在使用SharpSSH

【问题讨论】:

  • 您需要请求文件属性。如果文件不存在,您将收到错误消息。
  • 您不妨尝试下载文件并捕获异常(如果它不存在)。无论如何,这是一个竞争条件。
  • @BryanCrosby 是的,我也想过这种方式。但我想可能有更好的方法。
  • @Illep:假设您检查文件是否存在,但在检查之间发生了一些事情(文件被锁定、删除等)。您不妨尝试下载。
  • 好的,谢谢您的回复。如果您将其发布为答案,我会将其标记为答案。

标签: c# sftp sharpssh


【解决方案1】:

您可以考虑只接受小打击并尝试下载文件。如果它不存在,应该抛出一个异常,你可以抓住它并继续前进。检查文件是否存在是一个不稳定的情况,因此在大多数情况下,最好尝试执行您的操作。

【讨论】:

    【解决方案2】:

    我这样做是通过使用 .GetFileList 并将值读取到 ArrayList 中,然后循环遍历每个值,将文件名添加到列表框中。然后我根据列表框检查我的输入文件,看看它是否存在。下面的示例代码将 .GetFileList 值添加到 ArrayList 中,然后添加到列表框中。

    顺便说一句 - 这是 VB.NET :)

    Dim InputFileList As ArrayList = oSftp.GetFileList(frmOptions.tbFTPInboundFolder.Text)
     For Each f In InputFileList
                    If f.ToString() <> "." AndAlso f.ToString <> ".." Then
                        frmMain.lbFTPInputDirectory.Items.Add(f)
                    End If
                Next
    

    【讨论】:

      【解决方案3】:

      这应该可以解决问题。

       using (var sftp = new SftpClient(host, username, password))
              {
                  try
                  {
      
                      sftp.Connect();
                      MessageBox.Show(sftp.Exists(remoteDirectory).ToString());
                  }
                  catch (Exception Sftpex)
                  {
                      MessageBox.Show(Sftpex.ToString());
                  }
              }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-31
        • 2014-12-07
        • 2010-12-12
        • 2013-01-01
        • 2011-06-03
        • 1970-01-01
        • 2020-06-23
        • 1970-01-01
        相关资源
        最近更新 更多