Почему файл json удаляет старые данные из c ++? - PullRequest
0 голосов
/ 23 января 2019

Мне нужно сделать программу, которая хранит имена пользователей и пароли.Я хочу сохранить их в файле JSON.Я уже создал программу, которая делает это, но она удаляет старые данные и переписывает их как новые.

int main()
{
char pass[12];
char user[12];

std::ofstream o;

o.open("logins.json");

json j;

    system("cls");
    std::cout << "Username: ";
    std::cin >> user;
    std::cout << "Password: ";
    std::cin >> pass;

    j[user]["Username"] = user;
    j[user]["Password"] = pass;

    o << std::setw(4) << j << std::endl;
}

Так, например, мы вводим имя пользователя: admin, пароль: admin.Он создает файл json и сохраняет их:

{
"admin": {
    "Username": "admin",
    "Password": "admin"
}

}

Но когда я снова запускаю программу и на этот раз введите имя пользователя: user, password: user, он заменяет admin на user.Так что в основном он хранит только один вход.Но мне нужно это, чтобы хранить их все.Так что позже я могу получить к ним доступ.

И это не хорошо.Можете ли вы помочь мне исправить это или предложить что-то еще?

1 Ответ

0 голосов
/ 23 января 2019

Каждый раз, когда вы запускаете это приложение, оно перезаписывает файл logins.json, игнорируя его существующее содержимое.

Если вы хотите отредактировать файл json, вам необходимо сначала загрузить его, декодировать json, изменить json и сериализовать json обратно в файл, перезаписывая его.

например:.

int main() {
    json j;
    {
        std::ifstream i("logins.json");
        if(i.is_open())
            i >> j;
    }

    system("cls");
    std::string pass;
    std::string user;
    std::cout << "Username: ";
    std::cin >> user;
    std::cout << "Password: ";
    std::cin >> pass;

    j[user]["Username"] = user;
    j[user]["Password"] = pass;

    std::ofstream o("logins.json");
    o << std::setw(4) << j << '\n';
}
...