我正在将结构序列化为a MemoryStream,我想保存并加载序列化结构.
那么,如何将MemoryStream文件保存到文件中并将其从文件中加载回来?
拥有一个在加载和存储图像时可以使用多年的代码,我发现我有一个图像打破了这段代码:
const string i1Path = @"c:\my\i1.jpg";
const string i2Path = @"c:\my\i2.jpg";
var i = Image.FromFile(i1Path);
i.Save(i2Path, ImageFormat.Jpeg);
Run Code Online (Sandbox Code Playgroud)
例外是:
发生了System.Runtime.InteropServices.ExternalException
GDI +中发生了一般错误.
at System.Drawing.Image.Save(String filename,ImageCodecInfo encoder,EncoderParameters encoderParams)
at System.Drawing.Image.Save(String filename,ImageFormat format)
at ...
据我所知,图像没什么特别之处.它的大小约为250像素,可以在Windows Image Viewer或Paint.NET中打开:

(由于上面的图片,上传到Stack Overflow后不再产生错误,我把原始图像放在这里)
我发现在调用Save方法时,目标图像文件是用零字节创建的.
我真的对导致错误的原因一无所知.
我的问题:
例外:
GDI +中发生了一般错误.System.Drawing.Image.Save(String filename)的System.Drawing.Image.Save(String filename,ImageCodecInfo encoder,EncoderParameters encoderParams)at System.Drawing.Image.Save(String filename,ImageFormat format)at System.Drawing.Image.Save(String filename)
码:
byte[] bitmapData = new byte[imageText.Length];
MemoryStream streamBitmap;
bitmapData = Convert.FromBase64String(imageText);
streamBitmap = new MemoryStream(bitmapData);
System.Drawing.Image img = Image.FromStream(streamBitmap);
img.Save(path);
Run Code Online (Sandbox Code Playgroud)
我们将base64字符串转换为MemoryStream,然后创建System.Drawing.Image(Image.FromStream(streamBitmap)).最后,图像保存在临时文件中.
奇怪的是,当Web服务器上的活动(并发用户数)很高并且问题在IISRESET或应用程序池回收后暂时解决时,问题似乎发生了......
==>垃圾收集器问题?
我已经检查了TEMP文件夹的权限......