gpt4 book ai didi

c++ - 对 fstream 输出操作执行 'catch all' 错误检查的正确方法是什么?

转载 作者:太空狗 更新时间:2023-10-29 19:50:25 24 4
gpt4 key购买 nike

将数据发送到 fstream 时检查一般错误的正确方法是什么?

更新:我主要担心的是一些我听说过的关于输出和任何数据物理写入硬盘之间的延迟的事情。我的假设是命令“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_file_handle

是 C++ fstream 实例的糟糕名称。 fstreams 不是文件句柄,这只会让读者感到困惑。

其次,正如 Michael 指出的那样,没有必要将 C++ 字符串转换为 C 字符串。只有在与 C 风格的 API 接口(interface)时,以及在使用一些设计不佳的 C++ API(例如(不幸的)fstream::open())时,您才会真正发现自己这样做。

第三,测试流操作是否有效的规范方法是测试操作本身。流有一个到 void * 的转换,这意味着你可以这样写:

if ( save_file_handle << save_str ) {
// operation worked
}
else {
// failed for some reason
}

您的代码应始终测试流操作,无论是输入还是输出。

关于c++ - 对 fstream 输出操作执行 'catch all' 错误检查的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2605593/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com