2012-04-19 68 views
0

我想在使用它之前检查我硬盘中的文件是否为图像。如何检查文件是否是C++中的图像类型?

我使用C++/CLI

OpenFileDialog^ openFileDialog1 = gcnew OpenFileDialog; 
if (openFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK) { 
    Bitmap^ PreviewImage = gcnew Bitmap(openFileDialog1->FileName); //If File is not an image this will crash. 

} 

,因为我在该行评价说,如果该文件是不是会产生错误的图像,我该如何检查,如果该文件是前手的图像?

在此先感谢。

回答

1

通过捕捉异常。

.Net没有任何TryRead方法将返回false而不是引发异常。

您可以检查扩展名,但.png文件也可能是无效的图像。
(但是,你应该设置Filter从在第一时间选择其他文件类型阻止用户)

+0

是否可以让一个例子捕获此异常?非常感谢你。 – Grego 2012-04-19 18:19:33

+1

你在问如何使用“catch”块吗? – SLaks 2012-04-19 18:19:55

+0

哈哈哦yeaa我的坏,我想过别的东西。 ; D这对我来说很清楚。谢谢! – Grego 2012-04-19 18:27:12

0

公约通常决定了文件内容是由扩展名描述。如果我是你,我会做一些基本的检查,以确保你只允许.bmp,.jpeg,.jpg,.gif等。另外正如你提到的另一个答案,你应该确保捕获异常,你可以告诉用户在那里发生了错误。

你可以做这样的事情:

OpenFileDialog^ openFileDialog1 = gcnew OpenFileDialog; 
if (openFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK) { 
    try 
    { 
     Bitmap^ PreviewImage = gcnew Bitmap(openFileDialog1->FileName); //If File is not an  image this will crash. 
    } 
    catch(Exception ^ex) 
    { 
      //do something with the exception here 
    } 
} 
1

我将一个过滤器添加到打开文件对话框,以便用户可以选择只图像。

OpenFileDialog^ openFileDialog1 = gcnew OpenFileDialog; 
openFileDialog1->Filter = "Image Files(*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF" ; 

http://msdn.microsoft.com/en-us/library/system.windows.forms.filedialog.filter.aspx

但是,你仍然需要检查错误,当您尝试打开该文件,因为用户总是可以尝试在对话框的文本框中键入无效的文件名。

今天编程努力 软件工程师之间的竞争打造更大更好的傻瓜型的程序,宇宙试图 产生更大更好的白痴。到目前为止,宇宙正在赢得胜利。

丰富的厨师

+0

+1这比崩溃更好,并恢复建议。 – AJG85 2012-04-19 18:41:45

+0

@ AJG85我发现他仍然需要检查错误。我编辑了答案来反映这一点 – 2012-04-19 18:46:21

相关问题