C# 在尝试打开文件之前,如何确定System.Drawing.Bitmap是否可以打开文件?
我们有一些遗留代码,有一些。。。古怪的举止。您不能真正相信文件扩展名知道它是什么类型的文件。最大的例子是JPG实际上是TIF 可能还有其他复杂之处,所以除了文件的数据本身,我不能指望任何东西告诉我是否可以处理图像。我现在已经用try/catch包装了它,但是我不喜欢使用异常来进行流控制C# 在尝试打开文件之前,如何确定System.Drawing.Bitmap是否可以打开文件?,c#,bitmap,C#,Bitmap,我们有一些遗留代码,有一些。。。古怪的举止。您不能真正相信文件扩展名知道它是什么类型的文件。最大的例子是JPG实际上是TIF 可能还有其他复杂之处,所以除了文件的数据本身,我不能指望任何东西告诉我是否可以处理图像。我现在已经用try/catch包装了它,但是我不喜欢使用异常来进行流控制 try { using (Bitmap current = (Bitmap)Bitmap.FromFile(file)) { // Use current } } catc
try
{
using (Bitmap current = (Bitmap)Bitmap.FromFile(file))
{
// Use current
}
}
catch
{
// Must not be an image file
}
我们无法更改遗留代码以使其有意义。有没有比这更好的方法知道
文件
是图像?这听起来可能很愚蠢,但位图打开的文件是bmp或衍生文件(png、jpeg等)
能否尝试检查文件扩展名是否有这些扩展名?首先,您可能希望使用
Image.FromFile
而不是Bitmap.FromFile
真的没有简单的方法来满足你的要求FromFile
将委托给GDI+,在您真正尝试打开该文件之前,无法知道GDI+是否会喜欢该文件
你可以试试看。但最终,头仍然很可能是有效的,但文件本身会损坏。此外,您还为处理图像标题的代码添加了新的复杂性和可能的bug向量
我认为这实际上是一个例外情况,而不是将异常用于流控制的示例。如果您认为是图像的文件结果不是图像,那就是一个例外。为什么要使用
image.FromFile
?区别是什么?FromFile
是在Image
上定义的,并且没有被Bitmap
覆盖-存在Bitmap.FromFile
的唯一原因是因为Bitmap
是Image
的子类。我怀疑这就是为什么MSDN中的示例通常也会显示Image.FromFile
。没有区别。你的解释实际上是在推理不在乎。嗯……我认为对问题的描述表明这是不可能的。