【发布时间】:2014-09-11 10:37:09
【问题描述】:
现在我想通过Boost ptree生成一个加密的XML文件。
using boost::property_tree::ptree;
ptree pt;
pt.add("License.Unalterable.Signed.Guid", m_Guid);
pt.add("License.Unalterable.Signed.CustomerId", m_CustomerId);
pt.add("License.Unalterable.Signed.Name", m_Name);
pt.add("License.Unalterable.Signed.Version", m_version);
write_xml(licenseFileName, pt);
我想在调用write_xml() 之前加密整个xml 文件。通过阅读write_xml的代码,我知道xml节点是从ptree中一一读取的,然后立即一一写入fstream。 有没有办法在将整个xml数据流写入文件之前获取它?这样我就可以加密整个数据流,然后将它们写入文件。
目前,我的解决方案是在write_xml创建后重新读取这个xml文件,然后将xml内容加密后再写回来。
【问题讨论】:
-
所以使用备用
write_xml将其写入std::ostringstream,然后加密结果并将那个转储到磁盘。 -
你的意思是把
pt写成ostringstream? -
是的,然后从您的 ossencrypt 位的
.str()方法中提取结果,并将其转储到您的文件中。差不多就是这样。我对数据复制并不感到兴奋,我想看看是否有办法让你使用来自 boost 的进程间向量流或缓冲流,但是我不认为有(或者很多人比我向您展示的方法更精明)。不过,我知道std::ostringstream会起作用。 -
我想加密整个元素如
<Guid>123</Guid>,不知道如何从ptree获取整个xml元素树。 -
这就是
write_xml的意义所在。它会将整个 ptree 作为 XML 转储到目标流中。在那里,您可以一次性加密整个文件并将其发送到您的实际目标(磁盘文件)。如果可以更详细地解释这一点,我看不出如何。对不起。
标签: c++ xml encryption boost