gpt4 book ai didi

c# - 当磁盘上没有可用空间时,Image.Save 不会抛出异常

转载 作者:太空狗 更新时间:2023-10-30 00:38:59 26 4
gpt4 key购买 nike

我正在服务器上保存图像,我正在处理磁盘没有可用空间的情况。为了模拟这一点,我创建了一个几乎没有空间的虚拟硬盘驱动器,并尝试将图像保存在那里。

我原以为在尝试保存图像时会收到异常,其中:

using (var ms = new MemoryStream(myPictureStream))
using (Image image = Image.FromStream(ms))
{
image.Save(fileName, ImageFormat.Jpeg);
}

但事实并非如此,没有抛出异常。相反,保存了一个空文件,所以我无法意识到错误。我希望在尝试保存图像时收到一些错误,或者能够在抛出异常之前预测错误。

我已经考虑了一些可能的解决方案:

  • 我知道我可以使用 DriveInfo 检查驱动器上的可用空间,但在生产时我没有驱动器号来检查它,因此放弃了此选项。
  • 保存图像后,我尝试使用 Image.FromFile 检索它,然后抛出 OutOfMemoryException,但我知道这可能发生在其他情况下,并且我不确定这是否是检查磁盘是否没有可用空间的合法方法。

所以...知道为什么 Image.Save() 在没有可用空间时不会抛出错误吗?关于如何处理这种情况的任何建议?

编辑

GetLastError 没有帮助(它是代码 0,成功),所以看起来处理这种情况的最佳方法是将图像保存到临时 MemoryStream 然后将其写入文件,正如@Eldar 和@nvoigt 给出的答案所指出的。

这样做会抛出一个IOException,你可以检查异常的HResult看它是否是一个not-enough-free-space-轻松入盘(请参阅此答案:https://stackoverflow.com/a/9294382/4067893)。

最佳答案

Image.Save() 在内部调用一个 GDI 函数 GdipSaveImageToFile(),如果驱动器空间不足,该函数不会失败。您可以尝试使用 GetLastError() 来获取最后一个 Win32 错误。

如果 GetLastError() 没有帮助,我想到的唯一解决方案是将图像保存到临时 MemoryStream,然后将结果流写入一个文件。

关于c# - 当磁盘上没有可用空间时,Image.Save 不会抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36650541/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com