Я хочу редактировать файл с помощью RapidJSON, но когда я это делаю, файл не сохраняется
Это мой код
std::ifstream infile("/home/alexander/MyCompany/MyGame/Resources/res/puzzles(copia).json");
std::string line;
std::ofstream ofs("/home/alexander/MyCompany/MyGame/Resources/res/temporal.json", std::ofstream::out);
Document d;
while (std::getline(infile, line))
{
d.Parse(line.c_str());
if (d.HasParseError()) CCLOG("GetParseError %s\n", d.GetParseError());
if (d.IsObject() && d.HasMember("Lados"))
{
rapidjson::Value& a = d["Lados"]; // Using a reference for consecutive access is handy and faster.
rapidjson::Document::AllocatorType& allocator = d.GetAllocator();
assert(a.IsArray()); // explotar si no es un arreglo
a.PushBack(4, allocator).PushBack(8, allocator).PushBack(15, allocator).PushBack(16, allocator).PushBack(23, allocator).PushBack(42, allocator);
}
// Convertir JSON a string e Insertar en archivo
StringBuffer strbuf;
Writer<StringBuffer> writer(strbuf);
d.Accept(writer);
ofs << strbuf.GetString() << "\n";
}
ofs.close();
infile.close();
// ACTUALIZA ARCHIVO PRINCIPAL & LIMPIA TEMPORAL
std::ifstream src("/home/alexander/MyCompany/MyGame/Resources/res/puzzles(copia).json");
std::ofstream dst("/home/alexander/MyCompany/MyGame/Resources/res/temporal.json");
dst << src.rdbuf();
src.close();
dst.close();
if (remove("/home/alexander/MyCompany/MyGame/Resources/res/temporal.json") != 0) CCLOG("Error deleting file");
CCLOG("save");
Как вы можете видеть, я создаю новый файл с именем temporal, в который поместит мой измененный файл, а затем передам его обратно в исходный файл. проблема в том, что когда я делаю, что файл не изменяется, он создается и правильно очищается, но файл оригинала не изменяется и не знает почему?. Я использую cocos2d-x, C++ и rapidjson. нет, если мне нужно дать разрешение для моей программы на изменение архива или что-то в этом роде
JSON имеет несколько строк в этом формате:
{ "N" : 5, "Rotacion" : 42, "Igual" : 20, "Inverso" : 0, "RotacionE" : 47, "Espejo" : 22, "Puntuacion" : 0, "_id" : "563b7b4756ab632f47fe6d7f" , "Lados" : [], "Camino" : [ 6, 5, 4, 21, 22, 7, 2, 3, 20, 23, 8, 1, 18, 19, 24, 9, 0, 17, 16, 15, 10, 11, 12, 13, 14 ], "__v" : 0 }
1 ответ
Как я вижу, ваш код в порядке, что вам нужно сделать, это изменить направление ваших файлов.json прямо сейчас у вас это так:
std::ifstream src("/home/alexander/MyCompany/MyGame/Resources/res/puzzles(copia).json");
std::ofstream dst("/home/alexander/MyCompany/MyGame/Resources/res/temporal.json");
но вы должны выразить это так:
std::ifstream src("/home/alexander/MyCompany/MyGame/Resources/res/temporal.json");
std::ofstream dst("/home/alexander/MyCompany/MyGame/Resources/res/puzzles(copia).json");