2012-04-19 145 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

相關問題