如何确定System.Drawing.Bitmap是否可以在尝试打开之前打开文件?

时间:2014-01-16 18:57:57

标签: c# bitmap

我们有一些遗留代码,有一些......奇怪的举止。您无法真正信任文件扩展名以了解它是什么类型的文件。最好的例子是jpgs实际上是tif。

可能还有其他错综复杂的内容,所以我不能指望文件的数据本身可以告诉我是否可以处理图像。我现在把它包装在try / catch中,但我不喜欢使用流控制的异常。

try
{
    using (Bitmap current = (Bitmap)Bitmap.FromFile(file))
    {
        // Use current
    }
}
catch
{
    // Must not be an image file
}

我们无法改变遗留代码。有没有更好的方法知道file是图像?

2 个答案:

答案 0 :(得分:0)

听起来可能很愚蠢,但Bitmap会打开bmp或衍生文件(png,jpeg等)

您是否可以尝试检查文件扩展名是否包含任何扩展程序?

答案 1 :(得分:0)

首先,您可能希望使用Image.FromFile代替Bitmap.FromFile

没有简单的方法来做你所要求的事情。 FromFile将委托给GDI +,并且在你真正尝试打开它之前,无法知道GDI +是否会喜欢该文件。

您可以尝试write code to do some basic sanity check the headers of all the image types you want to support。但最终,标题仍然有效,但文件本身也会损坏。此外,您还为代码中的错误添加了一个新的复杂性和可能的​​矢量来处理图像标题。

我认为这实际上是一种例外情况,而不是使用流量控制异常的示例。如果您认为图像的文件不是,那就是例外。