以下代码基本上就是我正在做的一切 - 打开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在接受输入后没有关闭文件或者是什么?这似乎并非如此,因为我可以在程序运行时删除该文件。有谁知道为什么我的程序读取文件但没有将修改写回来?
答案 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操作系统,那么您应该可以删除已打开的文件。