elb*_*ita 4 c# system.drawing image out-of-memory
我正在服务器上保存图像,我正在覆盖磁盘没有可用空间的情况.为了模拟这一点,我创建了一个几乎没有空间的虚拟硬盘驱动器,我试图将图像保存在那里.
我希望在尝试保存图像时收到异常,但是:
using (var ms = new MemoryStream(myPictureStream))
using (Image image = Image.FromStream(ms))
{
image.Save(fileName, ImageFormat.Jpeg);
}
Run Code Online (Sandbox Code Playgroud)
但事实并非如此,没有例外.而是保存一个空文件,所以我不知道错误.我想在尝试保存图像时收到一些错误,或者在抛出异常之前能够预测错误.
我已经考虑了一些可能的解决方案:
DriveInfo
,但是我没有驱动器号来检查生产,所以这个选项被丢弃了.Image.FromFile
然后OutOfMemoryException
抛出,但我知道这可能发生在其他情况下,我不知道这是否是检查磁盘没有可用空间的合法方式.所以......任何想法为什么Image.Save()在没有可用空间时不会抛出错误?关于如何处理这种情况的任何建议?
GetLastError
没有帮助(它是代码0,成功),所以似乎处理这种情况的最佳方法是将图像保存为时间MemoryStream
,然后将其写入文件,正如@Eldar和@nvoigt给出的答案所指出的那样.
这样做,IOException
抛出一个,你可以检查HResult
异常,看看它是否是一个不够空闲的磁盘空间(参见这个答案:https://stackoverflow.com/a/ 9294382/4067893).
Image.Save()
内部调用GDI函数GdipSaveImageToFile()
,如果驱动器空间不足则不会失败.您可以尝试GetLastError()
获取最后一个Win32错误.
如果GetLastError()
没有帮助,我脑海中出现的唯一解决方案是将图像保存为时间MemoryStream
,然后将结果流写入文件.