使用SSH.NET从ByteArray / MemoryStream上传 - 文件的大小为0KB

时间:2016-03-08 08:44:46

标签: .net vb.net stream sftp ssh.net

当我第一次下载文件并通过SSH.NET上传时,一切正常。

client.DownloadFile(url, x)
Using fs= System.IO.File.OpenRead(x)
    sFtpClient.UploadFile(fs, fn, True)
End Using

但是我现在必须(不下载文件),但上传文件流:

Dim ba As Byte() = client.DownloadData(url)
Dim stream As New MemoryStream()
stream.Write(ba, 0, ba.Length)
sFtpClient.UploadFile(stream, fn, True)

正在发生的事情是UploadFile方法认为它成功,但在实际的FTP上,文件创建的大小为0KB。

我做错了什么?我也尝试添加缓冲区大小,但它没有用。

我在网上找到了代码。我应该做这样的事情:

client.ChangeDirectory(pFileFolder);
client.Create(pFileName);
client.AppendAllText(pFileName, pContents);

1 个答案:

答案 0 :(得分:6)

写入流后,流指针位于流的末尾。因此,当您将流传递给.UploadFile时,它会将指针(位于末尾)的流读取到末尾。因此,没有写任何东西。并且没有发出错误,因为一切都按照设计行事。

在将流传递给.UploadFile

之前,您需要将指针重置为开头
Dim ba As Byte() = client.DownloadData(url)
Dim stream As New MemoryStream()
stream.Write(ba, 0, ba.Length)
' Reset the pointer
stream.Position = 0
sFtpClient.UploadFile(stream, fn, True)