Проблема с записью в файл -
Кирилл - 22.10.2013
Ребят помогите пожалуйста. Мозг весь извертел так и не понял ничего.
в общем код.
Код:
forward OnPlayerBanPunct9(playerid);
public OnPlayerBanPunct9(playerid)
{
new player[MAX_PLAYERS],string[256],string1[256], string2[256];
GetPlayerName(playerid, player, sizeof(player));
format(string, sizeof(string), "< %s(%d) ушел(шла) c сервера. (Бан)", player, playerid);
SendClientMessageToAll(0xFFBF00AA,string);
format(string2,sizeof(string2),"%s",player);
format(string1,sizeof(string1),"%s(B)",player);
SetPlayerName(playerid,string1);
SendDeathMessage(INVALID_PLAYER_ID,playerid,201);
SetPlayerName(playerid,string2);
new serial[164];
gpci(playerid, serial, sizeof(serial));
new File:sfile = fopen("SerialBans.txt", io_readwrite);
new sstring[162];
format(sstring, sizeof(sstring), "%s\n", serial);
fwrite(sfile, sstring);
fclose(sfile);
format(string, sizeof(string), "%s(%d) забанен(а): Нарушение пункта правил 8 с занесением в ЧС (серийный номер:%s)",player,playerid,serial);
BanEx(playerid, string);
return false;
}
код был взят из FS окстайла.
Суть такова: при записи в файл, каждая новая запись пишется в начале страницы, при этом заменяет ту, что была до этого, хотя при этом формат выдает иное
Re: Проблема с записью в файл -
Alexander_Petrov - 22.10.2013
вместо io_readwrite нужен io_append
Re: Проблема с записью в файл -
Кирилл - 22.10.2013
да проблема с перезаписью устранена, но запись не идет построчно (нужно каждый серийник на свою строку, а не в одну)
Re: Проблема с записью в файл -
OKStyle - 23.10.2013
Quote:
Originally Posted by Alexander_Petrov
вместо io_readwrite нужен io_append
|
Тогда сервер будет падать, если файла не будет существовать.
Замени:
pawn Код:
new File:sfile = fopen("SerialBans.txt", io_readwrite);
На:
pawn Код:
new File:sfile;
if(fexist("SerialBans.txt")) sfile = fopen("SerialBans.txt", io_append);
else sfile = fopen("SerialBans.txt", io_readwrite);
Запись должна идти каждый раз в новой строке. Если нет, то замени:
На:
pawn Код:
for(new i = 0; sstring[i] != EOS; i++) fputchar(sfile, sstring[i], false);
Re: Проблема с записью в файл -
Кирилл - 23.10.2013
окстайл. не сработало запись идет в одну строку
Re: Проблема с записью в файл -
Stepashka - 23.10.2013
Quote:
Originally Posted by OKStyle
Тогда сервер будет падать, если файла не будет существовать.
|
Падать будет только при попытки
чтения из несуществующего файла:
Fopen
Много лишних переменных, и использования неоптимальных функций.
pawn Код:
forward OnPlayerBanPunct9(playerid);
public OnPlayerBanPunct9(playerid)
{
new playerName[MAX_PLAYERS_NAME],
string[256],
serial[256],
tempName[MAX_PLAYERS_NAME];
GetPlayerName(playerid, playerName, sizeof(playerName));
format(string, sizeof(string), "< %s(%d) ушел(шла) c сервера. (Бан)", playerName, playerid);
SendClientMessageToAll(0xFFBF00AA, string);
tempName = playerName;
strcat(tempName, "(B)");
SetPlayerName(playerid, tempName);
SendDeathMessage(INVALID_PLAYER_ID, playerid, 201);
SetPlayerName(playerid, playerName);
gpci(playerid, serial, sizeof(serial));
new File:sfile = fopen("SerialBans.txt", io_append);
format(string, sizeof(string), "%s\n", serial);
fwrite(sfile, string);
fclose(sfile);
format(string, sizeof(string), "%s(%d) забанен(а): Нарушение пункта правил 8 с занесением в ЧС (серийный номер:%s)", playerName, playerid, serial);
BanEx(playerid, string);
return false;
}
При этом
используется недокументированная запрещенная функция, закрыто.