我一直有奇怪的問題寫有ofstreams到文件,現在有C++調試ofstream失敗()狀態?
ofstream.fail()
是我ofstream.open()調用後返回true權。
是否有一些獲取附加信息的方法,例如關於爲什麼設置失敗狀態的更多細節?
編輯,附加信息:is_open()返回false。
我一直有奇怪的問題寫有ofstreams到文件,現在有C++調試ofstream失敗()狀態?
ofstream.fail()
是我ofstream.open()調用後返回true權。
是否有一些獲取附加信息的方法,例如關於爲什麼設置失敗狀態的更多細節?
編輯,附加信息:is_open()返回false。
io_state word=ofstream.rdstate();
if(word & ios::failbit){
cout<<"Failbit flag is set";
}
//etc
確保ofstream
沒有與它已經相關的文件(打開與流的文件的話)。根據http://www.cplusplus.com/reference/fstream/ofstream/open/:
如果對象已經有一個文件關聯(打開),則該函數將失敗。 失敗時,將設置失敗位標誌(可以使用成員失敗進行檢查),並根據異常設置的值來拋出異常。
如果您打開了一個文件,請在打開之前將其關閉。
編輯:如上圖所示,你可以檢查哪些'failbit flag
通過使用stream.rdstate()
剛剛設定發現了同樣的情況,我決定,讀過
如果(outfile.is_open一個錯字()! );
{
}
的,如果statment後沒有注意到分號...
報價this
std::string DescribeIosFailure(const std::ios& stream)
{
std::string result;
if (stream.eof()) {
result = "Unexpected end of file.";
}
#ifdef WIN32
// GetLastError() gives more details than errno.
else if (GetLastError() != 0) {
result = FormatSystemMessage(GetLastError());
}
#endif
else if (errno) {
#if defined(__unix__)
// We use strerror_r because it's threadsafe.
// GNU's strerror_r returns a string and may ignore buffer completely.
char buffer[255];
result = std::string(strerror_r(errno, buffer, sizeof(buffer)));
#else
result = std::string(strerror(errno));
#endif
}
else {
result = "Unknown file error.";
}
boost::trim_right(result); // from Boost String Algorithms library
return result;
}
是什麼'IS_OPEN()'說什麼? – jrok
is_open()返回false。 – user788171
據此.. http://www.cplusplus.com/reference/ios/ios/fail/我猜這個函數不會幫你挖掘失敗的真正原因... –