將數據發送到fstream時檢查一般錯誤的正確方法是什麼?在fstream輸出操作上執行'catch all'錯誤檢查的正確方法是什麼?
UPDATE:我主要關心的是我聽說過有關輸出和物理寫入硬盤的任何數據之間的延遲。我的假設是,命令「save_file_obj < < save_str」只會將數據發送到某種緩衝區,並且以下檢查「if(save_file_obj.bad())」在確定是否存在操作系統或硬件時不會有任何用處問題。我只是想知道什麼是確定性的「全部捕獲」方式,在執行任何後續操作(如關閉程序)之前,將字符串發送到文件並進行檢查以確定它已寫入磁盤。
我有以下代碼...除了密切似乎是合理的後檢查
int Saver::output()
{
save_file_handle.open(file_name.c_str());
if (save_file_handle.is_open())
{
save_file_handle << save_str.c_str();
if (save_file_handle.bad())
{
x_message("Error - failed to save file");
return 0;
}
save_file_handle.close();
if (save_file_handle.bad())
{
x_message("Error - failed to save file");
return 0;
}
return 1;
}
else
{
x_message("Error - couldn't open save file");
return 0;
}
}
誰說'save_str'是一個'std :: string'? :p也許這是一個'std :: basic_string <>'在一些自定義的'char_traits'上模板化的,比如不區分大小寫的特徵或者什麼? :p – wilhelmtell 2010-04-10 04:29:47
在這種情況下,它是std :: basic_string –
Truncheon
2010-04-12 13:35:48