You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Asio同步随机读取遇异常时,如何获取已读取字节数?

问题:随机访问文件同步读抛出异常时,如何获取已读取字节数?

调用随机访问设备(例如random_access_file)的同步读取操作时,若抛出异常,如何得知已读取的字节数?是否该场景不被支持,必须使用boost::system::error_code重载版本才能获取已读取字节数?

示例代码:

error_code ec;
size_t s = a.read_some_at(offset, buffers, ec);
offset += s; // need to be done before unwinding
if (ec) throw system_error(ec);
return s;

回答

是的,必须使用带boost::system::error_code参数的重载版本才能在发生错误时获取已读取的字节数。

当使用会抛出异常的重载版本时,一旦操作中途出错抛出异常,流程会被直接中断,你没有机会获取到已经成功读取的字节数——因为这类重载只会在操作完全成功时返回读取量,出错时直接抛出异常,不会返回任何部分读取的结果。

而带error_code参数的重载则不同:它会优先返回已经成功读取的字节数,再通过传入的error_code对象告知是否发生了错误。就像示例代码里展示的那样,你可以先更新偏移量(把已读取的字节数记录下来),再检查错误码,最后根据情况抛出异常。这样即使操作中途出错,也能保留住已读取的字节数信息。

内容的提问来源于stack exchange,提问作者Johannes Schaub - litb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 21:55:47