我想在使用之前检查我硬盘中的文件是否为图像。
我正在使用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.
}
正如我在该行中评论的那样,如果文件不是会产生错误的图像,我该如何检查该文件是否是一张图像?
提前致谢。
答案 0 :(得分:1)
通过捕获异常。
.Net没有任何TryRead
方法会返回false而不是抛出异常。
您可以检查扩展程序,但.png
文件也可能是无效图像
(但是,您应该设置Filter
以阻止用户首先选择其他文件类型)
答案 1 :(得分: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
但是,当您尝试打开文件时仍需要检查错误,因为用户总是可以尝试在对话框的文本框中键入无效的文件名。
今天的编程是软件工程师努力的竞赛 建立更大,更好的傻瓜计划,宇宙尝试 产生更大更好的白痴。到目前为止,宇宙正在赢得胜利。
Rich Cook
答案 2 :(得分: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
}
}