fexist

Материал из Pro-Pawn Wiki
Перейти к: навигация, поиск

Описание:

Проверяет существование файла.

Параметры:

(const pattern[])
const pattern[] Имя файла.


Возвращаемое значение:

1, если файл существует, иначе 0.

Bug.png
Баг SA-MP
Функция проверяет существование файла и для её возвращаемого значения логичен тег bool, однако в file.inc функция объявлена без тега. Причина в том, что изначально в Pawn 3.0 функция была объявлена с тегом bool:
native bool: fexist(const name[]);
, но в SA-MP Team неосторожно обновили инклуды до более новой версии, забыв обновить реализацию функций на сервере:
native fexist(const pattern[]);
В более поздних версиях Pawn аргумент name переименован в pattern, а сама функция объявлена без тега, поскольку она не проверяет на существование один файл, а ищет файлы по маске, возвращая количество найденных файлов (целое число). Как результат, в SA-MP функция объявлена по-новому (без тега bool и с аргументом pattern вместо name), но работает по-старому.


Пример использования:

CMD:delacc(playerid, params[])
{
    if (!sscanf(params, "U")) // Если sscanf2 нашёл игрока с указанным именем
        return SendClientMessage(playerid, -1, "Ошибка: Игрок с таким именем подключен к серверу, сначала отключите его (/kick)");
    new name[MAX_PLAYER_NAME + 9 + 4 + 1]; // "+ 9 + 4" - для места под добавление "accounts/" и расширения ".txt"
    if (sscanf(params, "s[24]", name)) // Если игрок не ввёл строку
        return SendClientMessage(playerid, -1, "Использование: /delacc [имя игрока]");
    format(name, sizeof(name), "accounts/%s.txt", name);
    if (!fexist(name))
        return SendClientMessage(playerid, -1, "Ошибка: Аккаунта с данным именем не существует");
    if (!fremove(name))
        return SendClientMessage(playerid, -1, "Ошибка: Не удалось удалить файл");
    return SendClientMessage(playerid, -1, "Аккаунт удалён");
}


См. также: