最近学校算法课要求完成一个搭建简易区块链系统的小项目,里面需要进行json文件的解析,jsoncpp因为环境配置很苦手因此我选择了腾讯的rapidjson,今天在debug写出来的客户端的时候,发现rapidjson和fstream结合使用有一个需要注意的地方。
基于文件的标准操作,使用ifstream读入文件之后需要进行关闭操作。
在此场景下我需要使用rapidjson中的istreamwrapper进行文件输入流的处理,并把结果解析到rapidjson库的核心类document中。
一开始我是这样写的
Document tail_doc_02;
IStreamWrapper isw_tail_02(change_tail_02);
change_tail_02.close();
tail_doc_02.ParseStream(isw_tail_02);
结果解析出来的tail_doc_02为空,报错is_not_object。通过cout调试,发现需要将parsestream运行完后才能得到正确结果,即:
Document tail_doc_02;
IStreamWrapper isw_tail_02(change_tail_02);
tail_doc_02.ParseStream(isw_tail_02);
change_tail_02.close();
故可知必须要在解析完成并放入document之后才能关闭文件流。不能在istreamwrapper后就关闭文件。
仅作个人笔记使用,如有不对请指正!