【问题标题】:In SftpClient how can i check if the file has been donwlonded in directory or not?在 SftpClient 中,我如何检查文件是否已在目录中下载?
【发布时间】:2020-04-09 19:12:38
【问题描述】:

我正在从 SFTP 下载并想检查该文件是否存在于文件夹“目录@”D:...”中

 using (SftpClient sftp = new SftpClient(Host, Port, Username, Password))

            {
                sftp.Connect();

                var files = sftp.ListDirectory(RemoteFileName);

                string downloadFileNames = string.Empty;

                foreach (var file in files)
                {
                    if (file.FullName.EndsWith(".gz"))
                    {
                        using (Stream fileStream = File.Create(Path.Combine(directory, file.Name)))
                        {

                            sftp.DownloadFile(file.FullName, fileStream);
                        }
                    }
                    downloadFileNames += file.Name;
                }
            }

【问题讨论】:

  • 这能回答你的问题吗? How to find out if a file exists in C# / .NET?
  • 您是否正在尝试验证您下载的文件是否存在?
  • 使用DownloadFile 的重载,让您提供回调。文件完成后将调用回调,此时您可以设置标志或显示消息。
  • @JohnWu 你的想法很好。你能告诉我一些代码是怎么做到的吗?

标签: c#


【解决方案1】:

根据您的评论:

我不想花时间下载我想检查的相同文件 早下载了就不要再下载了

我假设您只想下载以前没有下载过的文件。

为了实现这一点,请使用File.Exists 验证您是否已经将文件下载到某个位置:

foreach (var file in files)
{
    if (file.FullName.EndsWith(".gz"))
    {
        var targetFilename = Path.Combine(directory, file.Name);

        if (!File.Exists(targetFilename))
        {
            using (Stream fileStream = File.Create(targetFilename))
            {
                sftp.DownloadFile(file.FullName, fileStream);
            }
            downloadFileNames += file.Name;
        }
    }
}

这会在从 SFTP 服务器下载目标文件之前验证目标文件是否存在。

【讨论】:

    猜你喜欢
    • 2014-02-18
    • 1970-01-01
    • 2020-06-14
    • 2019-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-04
    • 1970-01-01
    相关资源
    最近更新 更多