检查SFTP远程服务器上文件是否存在。

4
以下代码将从SFTP远程服务器下载名为file.txt的文件到本地机器上。
 sftp.Get("/usr/mine/file.txt" , "C:/Folder/");

我想要做的是检查远程服务器中是否存在名为file.txt的文件。我该如何进行此检查?请帮忙。
我正在使用SharpSSH

您需要请求文件属性。如果文件不存在,您将会收到一个错误。 - Eugene Mayevski 'Callback
你可以尝试下载文件,如果不存在,就捕获异常。反正这本身就是一种竞态条件。 - Bryan Crosby
@BryanCrosby 是的,我也考虑过这种方法。但是可能还有更好的方法吧。 - Illep
@Illep:假设您检查文件是否存在,但在您的检查之间发生了某些事情(文件被锁定、删除等)。那么您最好尝试下载。 - Bryan Crosby
是的,谢谢您的回复。如果您将其作为答案发布,我会将其标记为答案。 - Illep
3个回答

4
这应该就能行了。
 using (var sftp = new SftpClient(host, username, password))
        {
            try
            {

                sftp.Connect();
                MessageBox.Show(sftp.Exists(remoteDirectory).ToString());
            }
            catch (Exception Sftpex)
            {
                MessageBox.Show(Sftpex.ToString());
            }
        }

3

您可以考虑尝试下载文件,即使会有一定的风险。如果文件不存在,则会抛出异常,您可以捕获并继续进行操作。检查文件是否存在是一个不稳定的情况,在大多数情况下,最好尝试执行您的操作。


这种方法不太好。你浪费了太多的流量。 - undefined

0
我是通过使用 .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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接