Работа с файлами в Pawn: чтение и запись

Активный
Статус
Сообщения
516
Лайки
32

8

месяц на сайте

Работа с файлами необходима для сохранения данных игроков, логов и конфигураций.

Открытие файла
Код:
new File:file = fopen("data.txt", io_read); // чтение
new File:file = fopen("data.txt", io_write); // запись (перезапись)
new File:file = fopen("data.txt", io_append); // добавление в конец

Режимы открытия:
- io_read - только чтение
- io_write - запись (файл перезаписывается)
- io_append - добавление в конец файла
- io_readwrite - чтение и запись

Чтение из файла
Код:
new File:file = fopen("players.txt", io_read);
if(file)
{
    new line[128];
    while(fread(file, line))
    {
        // обработка строки
        printf("Прочитано: %s", line);
    }
    fclose(file);
}

Запись в файл
Код:
new File:file = fopen("log.txt", io_append);
if(file)
{
    new string[128];
    format(string, sizeof(string), "Игрок %s подключился\n", playername);
    fwrite(file, string);
    fclose(file);
}

Пример: система сохранения
Код:
SavePlayerData(playerid)
{
    new filename[64], string[256];
    format(filename, sizeof(filename), "players/%d.ini", playerid);
    
    new File:file = fopen(filename, io_write);
    if(file)
    {
        format(string, sizeof(string), "Money=%d\n", GetPlayerMoney(playerid));
        fwrite(file, string);
        
        format(string, sizeof(string), "Level=%d\n", PlayerInfo[playerid][pLevel]);
        fwrite(file, string);
        
        fclose(file);
    }
}

LoadPlayerData(playerid)
{
    new filename[64], string[256], key[64], value[64];
    format(filename, sizeof(filename), "players/%d.ini", playerid);
    
    new File:file = fopen(filename, io_read);
    if(file)
    {
        while(fread(file, string))
        {
            sscanf(string, "p<=>s[64]s[64]", key, value);
            
            if(!strcmp(key, "Money"))
            {
                GivePlayerMoney(playerid, strval(value));
            }
            else if(!strcmp(key, "Level"))
            {
                PlayerInfo[playerid][pLevel] = strval(value);
            }
        }
        fclose(file);
    }
}

Проверка существования файла
Код:
if(fexist("config.ini"))
{
    // файл существует
}
else
{
    // файл не существует, создаем новый
}

Важные моменты:
- Всегда проверяйте успешность открытия файла
- Закрывайте файлы после работы (fclose)
- Используйте правильные режимы открытия
- Проверяйте размер буферов для строк

Правильная работа с файлами - основа стабильного сервера!
 

1 человек читают эту тему (Всего: 1, Пользователей: 0, Гостей: 1)

Сверху