为什么pugixml没有写回当前打开的文件?

时间:2015-06-16 12:25:17

标签: c++ pugixml

以下代码基本上就是我正在做的一切 - 打开XML文件,处理它并(尝试)将其写回。但每次写回都失败了。我试图找到一个解决方案编写代码,谷歌搜索,但没有得到答案。

xml_parse_result result = doc.load_file("data.xml");
//I checked the value of result, it is equal to status_ok, so the file opened fine.
//...
//some XML processing
//...
bool b = doc.save_file("data.xml"); //b is always false

那么,是否pugi在接受输入后没有关闭文件或者是什么?这似乎并非如此,因为我可以在程序运行时删除该文件。有谁知道为什么我的程序读取文件但没有将修改写回来?

1 个答案:

答案 0 :(得分:1)

尝试从ifstream加载文件。通过这种方式,您可以控制文件,并确保文件何时关闭。

// Initialization code
{
  std::ifstream stream("data.xml");
  pugi::xml_parse_result result = doc.load(stream);
  // Check validity
} // Input stream implicitly destructed and file closed.
// Processing
{
  std::ofstream stream("data.xml");
  doc.save(stream);
} // Output stream implicitly destructed and file closed.

至于为什么会发生这种情况...... Documentation并未对其进行明确说明,因此很难说清楚。它似乎应该在加载后关闭文件,但唯一可以确定的方法是查看源代码。顺便说一句,如果您使用的是Linux操作系统,那么您应该可以删除已打开的文件。