我们有一些遗留代码,有一些......奇怪的举止。您无法真正信任文件扩展名以了解它是什么类型的文件。最好的例子是jpgs实际上是tif。
可能还有其他错综复杂的内容,所以我不能指望文件的数据本身可以告诉我是否可以处理图像。我现在把它包装在try / catch中,但我不喜欢使用流控制的异常。
try
{
using (Bitmap current = (Bitmap)Bitmap.FromFile(file))
{
// Use current
}
}
catch
{
// Must not be an image file
}
我们无法改变遗留代码。有没有更好的方法知道file
是图像?
答案 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。但最终,标题仍然有效,但文件本身也会损坏。此外,您还为代码中的错误添加了一个新的复杂性和可能的矢量来处理图像标题。
我认为这实际上是一种例外情况,而不是使用流量控制异常的示例。如果您认为图像的文件不是,那就是例外。