安装最新版本的 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 的屏幕截图。
您需要在写入后调整流位置。尝试移动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");