Почему pugixml не записывает обратно в текущий открытый файл?
Следующий код - в основном все, что я делаю - открываю файл XML, обрабатываю его и (пытаюсь) записать обратно. Но переписываться не всегда, каждый раз. Я пытался найти решение, написал код, Googled, но не получил ответа.
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 ответ
Попробуйте загрузить файл из 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.
Относительно того, почему это происходит... Документация не содержит явных указаний, поэтому трудно сказать. Кажется, он должен закрыть файл после загрузки, но единственный способ убедиться в этом - посмотреть исходный код. Кстати, если вы работаете в операционной системе Linux, вы сможете удалить открытые файлы.