Stream 转换为 0 字节

问题描述 投票:0回答:1

安装最新版本的 Visual Studio 2022 和 .NET 8.0 后,我在将流转换为文件(保存本地或上传到 FTP)时遇到问题。

到目前为止,我一直在使用以下代码,非常棒。

var bitmap = AlbumCover0.Source as BitmapSource;
var encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bitmap));

var stream = new MemoryStream();
stream.Position = 0;
encoder.Save(stream);

SessionOptions sessionOptions = FTP.Login(); // using WinScp ftp client

using Session session = new();
session.Open(sessionOptions);
//The following line was working, but now its uploading 0 bytes.
session.PutFile(stream, "/htdocs/Music/Covers/" + ItemTxt2.Text + ".png");

所以我将流转换为 byte[],结果发现它有 20357 个字节。

var bitmap = AlbumCover0.Source as BitmapSource;
...
encoder.Save(stream);

byte[] bytes = stream.ToArray(); // bytes[20357] for example

SessionOptions sessionOptions = FTP.Login();
...
session.PutFile(stream, "/htdocs/Music/Covers/" + ItemTxt2.Text + ".png");  //Still uploading 0 bytes.

所以我尝试先将其转换为FileStream,然后上传文件。但仍然是 0 字节。

using (FileStream file = new FileStream("C:\\test.png", FileMode.Create))
{
     stream.CopyTo(file); //0 bytes.
}

session.DoPutFiles("C:\\test.png", "/htdocs/Music/Covers/" + ItemTxt2.Text + ".png", false, new TransferOptions() { TransferMode = TransferMode.Binary }); // for sure its uploading 0 bytes.

附件是文件 C: est.png Properties 的屏幕截图。

enter image description here 文件:C: est.png 大小:0 字节

c# wpf stream ftp .net-8.0
1个回答
1
投票

您需要在写入后调整流位置。尝试移动stream.Position = 0;

:

var stream = new MemoryStream(); encoder.Save(stream); stream.Position = 0; // here SessionOptions sessionOptions = FTP.Login(); // using WinScp ftp client using Session session = new(); session.Open(sessionOptions); //The following line was working, but now its uploading 0 bytes. session.PutFile(stream, "/htdocs/Music/Covers/" + ItemTxt2.Text + ".png");
    
© www.soinside.com 2019 - 2024. All rights reserved.