使用 SSH.NET (VB.NET) 将文件下载到字节数组

Download file to byte array using SSH.NET (VB.NET)

我想使用 SSH.NET 库从 SFTP 下载文件。但是,我希望在 Byte 数组中接收此文件。因此,这个文件必须存储在内存中。

这是我的做法

Sub Main()
   Dim client As SftpClient = New SftpClient(hostname, username, password)
   client.Connect()
   Using b As System.IO.Stream = client.OpenRead("/www/Server.exe")
        Dim data() As Byte = GetStreamAsByteArray(b)
   End Using
End Sub

Public Shared Function GetStreamAsByteArray(ByVal stream As System.IO.Stream) As Byte()
    Dim streamLength As Integer = Convert.ToInt32(stream.Length)

    Dim fileData As Byte() = New Byte(streamLength) {}

    ' Read the file into a byte array
    stream.Read(fileData, 0, streamLength)
    stream.Flush()
    stream.Close()

    Return fileData
End Function

不过这个方法不行:确实,写到磁盘上测试了一下,已经损坏了。

我认为您的代码或多或少是正确的。唯一的问题是,在 VB.NET 中,New Byte(X) 确实分配了一个比您想要的长一个字节的数组:0..X(不是 1..X0..X-1,因为您可能已经预料到了)。

因此,如果您随后保存完整数组(例如 File.WriteAllBytes),而不仅仅是 stream.Length 字节,文件将大一个字节,并带有一个额外的尾随 NULL 字节。

这是正确的:

Dim fileData As Byte() = New Byte(streamLength - 1) {}