太多的文件句柄打開?空間不足?拒絕訪問?間歇性網絡驅動器問題?文件已存在?文件被鎖定?沒有更多細節很難說。 編輯:根據您所提供的額外的細節,這聽起來像你可能會泄漏文件句柄(打開文件並沒有關閉它們,因此運行的每個進程的文件句柄限制)。
我假設您熟悉使用exceptions
method來控制iostream
故障是作爲例外還是作爲狀態標誌進行通信。
在我的經驗中,iostream
類給出了什麼問題時,他們的I/O操作過程中發生故障非常小的細節。但是,因爲它們通常使用較低級別的標準C和OS API函數來實現,所以您通常可以獲取底層C或OS錯誤代碼以獲取更多詳細信息。我使用以下功能獲得了好運。
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;
}
「曾經在一段時間。」定義 – Alex 2009-11-12 22:04:13
@windfinder:'while(true){fail();打破; }'。 – 2009-11-12 22:06:56
獨特的名字是什麼意思?你是使用_tmpfile還是其他一些方法來生成一個唯一的文件名?這是用於Windows嗎? – Matt 2009-11-12 22:46:49