使用SSH.NET下载时文件为空

本文关键字:文件 下载 SSH NET 使用 | 更新日期: 2023-09-27 18:25:54

我正在使用SSH.NET从SFTP下载文件,这是我的代码:

string host = ConfigurationManager.AppSettings["SFTPDomain"];
string username = ConfigurationManager.AppSettings["SFTPUser"];
string password = ConfigurationManager.AppSettings["SFTPPass"];
string remoteFileName = ConfigurationManager.AppSettings["SFTPFileName"].ToString();
using (var sftp = new SftpClient(host, username, password))
{
    sftp.Connect();
    using (var file = File.OpenWrite(FilePath))
    {
        sftp.DownloadFile(remoteFileName, file);
    }
    sftp.Disconnect();
}

问题是下载了csv文件,但里面没有任何数据。我也更改了remoteFile路径,但下载的文件中仍然有空数据。我试着用检查文件是否存在

if (sftp.Exists(remoteFileName))
{
}

即使我用"pp"更改remoteFileName,它也总是返回true。

有人能帮我做错事吗?或者向我推荐另一个从SFTP服务器下载文件的库。我已经尝试过WinSCP,但我遇到了主机密钥错误,所以我试图按照服务器教程的指导传递正确的SshHostKeyFingerprint。我仍然得到主机密钥错误。有没有什么简单的库我只需要从SFTP下载文件?

使用SSH.NET下载时文件为空

我也看到过同样的问题。使用SSH.NET的ScpClient而不是SftpClient对我有效

using (ScpClient client = new ScpClient(host, username, password))
{
    client.Connect();
    using (Stream localFile = File.Create(localFilePath))
    {
         client.Download(remoteFilePath, localFile);
    }
}

使用ScpClient,您只能获得上传/下载功能,而不是SFTP的许多附加功能,但这对于您的用例来说可能已经足够好了。

尝试使用:

using (Stream file = File.OpenWrite(FilePath))
{
    sftp.DownloadFile(remoteFileName, file);
}

在本地保存之前,您需要从远程服务器读取流。

这是一个非常古老的问题,但我想我会在这里给出答案,为像我这样的新手节省一些精力,他们可能会遇到类似的问题,只需搜索这个问题:

本质上,在您调用DownloadFile方法并写入流之后,您必须将流位置重置回起始位置:

using (var sftp = new SftpClient(host, username, password))
{
    sftp.Connect();
    using (var file = File.OpenWrite(FilePath))
    {
        sftp.DownloadFile(remoteFileName, file);
        file.Position = 0;
    }