0

我想在使用之前检查我硬盘中的文件是否是图像。

我正在使用 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.

}

正如我在该行中评论的那样,如果文件不是会产生错误的图像,我该如何检查文件是否是图像?

提前致谢。

4

3 回答 3

1

通过捕获异常。

.Net 没有任何TryRead方法会返回 false 而不是抛出异常。

您可以检查扩展名,但.png文件也可能是无效图像。
(但是,您应该首先设置Filter以阻止用户选择其他文件类型)

于 2012-04-19T18:18:20.380 回答
1

我会向 OpenFileDialog 添加一个过滤器,以便用户只能选择图像。

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

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

今天的编程是软件工程师努力构建更大更好的防白痴程序与宇宙试图产生更大更好的白痴之间的竞赛。到目前为止,宇宙正在获胜。

丰富的厨师

于 2012-04-19T18:30:04.517 回答
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
     }
}
于 2012-04-19T18:19:52.823 回答