Активный
- Тема Автор
- #1
Работа с файлами необходима для сохранения данных игроков, логов и конфигураций.
Открытие файла
Режимы открытия:
- io_read - только чтение
- io_write - запись (файл перезаписывается)
- io_append - добавление в конец файла
- io_readwrite - чтение и запись
Чтение из файла
Запись в файл
Пример: система сохранения
Проверка существования файла
Важные моменты:
- Всегда проверяйте успешность открытия файла
- Закрывайте файлы после работы (fclose)
- Используйте правильные режимы открытия
- Проверяйте размер буферов для строк
Правильная работа с файлами - основа стабильного сервера!
Открытие файла
Код:
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)
- Используйте правильные режимы открытия
- Проверяйте размер буферов для строк
Правильная работа с файлами - основа стабильного сервера!