“标准”提供了复制文件的方法,例如通过c ++。
ifstream ins;
ofstream out s;
// I've omitted the opening of those stream, since it is not important for the following question.
s << ins.rdbuf();
现在,问题是上述行可能会失败,在某些情况下,特别是我要谈的那个,我无法知道出现了什么问题。
例如,假设输入流实际上是位于远程NAS机器上的大文件。 现在,可能存在连接错误,这将导致文件句柄无效。 试图模拟这个,我使用了一个大文件,在调试器中我停在这一行,找到了句柄,然后继续调试器,然后强行关闭文件句柄(通过sysinternals套件的process-explorer)。
结果是:行完成,文件未正确复制,有时根本不复制,有时只关闭文件的一部分。 与运算符&lt;&lt;&lt;&lt;&rdbuf()的文档相矛盾,没有设置错误/失败状态,也没有抛出异常。
我唯一能注意到的是,在尝试关闭输入流时,会引发异常。
有没有人这么相同的现象?! 无论如何都要检查/测试这个是否正确完成?
此致
答案 0 :(得分:1)
Streams在错误报告方面非常糟糕。在这
例如,你所能做的就是检查输出流上的badbit
;该
标准要求<<
运算符吸收所有异常,设置
badbit
如果发生的话。显然,这并没有告诉你
错误是由输入错误还是输出错误引起的。
通常,如果您正在使用最常见的实现
编译器,无论如何都不会报告输入错误。为了
大多数情况下,除非近年来情况发生变化,否则实施
filebuf
将输入错误视为文件末尾。
如果您需要更好的错误报告,我认为您一直坚持
实现你自己的streambuf
(不是很困难),哪个
跟踪各种错误;然后你可以问streambuf
转移后收到的错误。