2016-03-08 43 views
5

Po pierwszym pobraniu pliku i przesłaniu go przez SSH.NET wszystko działa poprawnie.Przesyłanie z ByteArray/MemoryStream przy użyciu SSH.NET - Plik zostanie utworzony o rozmiarze 0KB

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

Jednak muszę teraz (nie pobrać plik), ale przesyłanie strumienia pliku:

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

Co się dzieje jest to, że metoda UploadFile myśli, że się udało, ale na rzeczywistej FTP, plik jest tworzony o rozmiarze 0 KB.

Co robię źle, proszę? Próbowałem też dodać rozmiar bufora, ale to nie zadziałało.

Znalazłem kod w Internecie. Czy powinienem robić coś takiego:

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

Odpowiedz

4

Po zapisie do strumienia wskaźnik strumienia znajduje się na końcu strumienia. Więc kiedy przekazujesz strumień do .UploadFile, odczytuje on strumień od wskaźnika (który jest na końcu) do końca. Dlatego nic nie jest napisane. I nie wydano żadnego błędu, ponieważ wszystko zachowuje się zgodnie z przeznaczeniem.

Trzeba zresetować wskaźnik do początku, przed przekazaniem strumienia do .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)