allegro 5 пишет файлы при использовании физфс

В настоящее время я пытаюсь найти способ записать файл (точнее, файл конфигурации allegro) в смонтированный zip-файл, используя physfs и allegro 5.

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

Кроме того, когда не используется PhysFs, все работает отлично.

вот код, который я использую:

Game::Game(int height, int width, int newDifficulty)
{

PHYSFS_init(NULL);
if (!PHYSFS_addToSearchPath("Data.zip", 1)) {
    // error handling
}
al_set_physfs_file_interface();

cfg = al_load_config_file("cfg.cfg");
if (cfg != NULL) // file exists, read from it
{
    const char *score = al_get_config_value(cfg, "", "highScore");
    highScore = atoi(score); // copy value
}
else // file does not exist, create it and init highScore to 0
{
    cfg = al_create_config();
    al_set_config_value(cfg, "", "highScore", "0");
    highScore = 0;
    al_save_config_file("cfg.cfg", cfg);
}
...
}

и в другой функции:

void Game::resetGame()
{
// high score
if (player->getScore() > highScore)
{
    highScore = player->getScore();
    // convert new highScore to char* that can be saved
    stringstream strs;
    strs << highScore;
    string temp_str = strs.str();
    char const* pchar = temp_str.c_str();

    if (cfg != NULL) // file exists, read from it
    {
        al_set_config_value(cfg, "", "highScore", pchar);
        al_save_config_file("cfg.cfg", cfg);
    }
}
...
}

так как код работает без PhysFs, я думаю, я правильно обработал сам файл конфигурации. Любая помощь будет высоко оценен!

ура, Ханнес

1 ответ

Тем временем я решил проблему сам. по-видимому, у Physfs нет возможности записи в архив.

поэтому мне нужно PHYSFS_setWriteDir("jhdsaf"), сохранить cfg-файл в этой папке, а затем заменить оригинальный zip-файл на обновленную версию cfg-файлом, непосредственно перед закрытием игры (после того, как все ресурсы выгружены, потому что в противном случае почтовый индекс все еще используется).

если кто-то заинтересован в коде для этого, просто ответьте на этот пост!

Ханнес

Другие вопросы по тегам