我已經寫了一個簡單的基於控制檯的web服務器,我試圖移植到Qt,所以我可以爲它開發一個GUI。 在我的課上,控制從硬盤讀取文件我一直在使用例外來指示讀取文件時出現錯誤等。使用Qt Creator編譯時,我的異常沒有被捕獲
現在,當我嘗試運行使用Qt 5.7編譯的代碼時,我的catch-block突然間我的異常並沒有出現。相反,它會一直拋出並崩潰。 但是,當我寫趕上(...)拿起各類它的工作原理沒有崩潰的異常..
這是我filereading函數的代碼:
fstream file;
file.exceptions(ifstream::failbit | ifstream::badbit);
try{
string content;
//Open file and read the file to string
file.open(this->getDirectory() + filename, ios_base::in|ios_base::binary);
file.seekg(0, file.beg);
char tmpChar = 0;
while(file.peek() != EOF)
{
file.read(&tmpChar, sizeof(tmpChar));
content.push_back(tmpChar);
}
file.close();
unique_ptr<fileObject> tmpPtr(new fileObject(filename, content, "text/html"));
if(this->addFileToCache(move(tmpPtr)))
return true;
return false;
}
catch(const ios_base::failure& e){
if(file.is_open()) file.close();
return false;
}
爲什麼不是這個工作與Qt?趕上(...)拿起的ios_base ::失敗例外,所以我不明白爲什麼我的代碼不工作了..
UPDATE:
當我拿起例外使用catch(例外& e)並打印它的信息我得到以下結果:.what()返回「basic_ios :: clear」,typeid(e).name()返回「NSt8ios_base7failureE」。
我正在用QtCreator中的MinGw 5.3.0 32位編譯,以及我的異常工作時使用的編譯器是MinGw-w64 4.7.3。
請顯示完整的代碼示例 – nos
@nos您有一個完整的代碼示例 – hallos
您如何知道'catch(...)'恰恰捕獲了'ios_base :: failure'異常而沒有任何其他異常? – Dmitry