fopen

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

Описание:

Открывает файл для дальнейшего проведения операций чтения/записи.

Параметры:

(const name[], filemode: mode=io_readwrite)
const name[] Имя файла.
filemode: mode Режим открытия файла (необязательный параметр; по умолчанию файл открывается в режиме чтения и записи).


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

Хендл открытого файла (преобразованный из указателя типа FILE * в языке C/C++ в ячейку Pawn) или File:0, если не удалось открыть файл.

Info rhombus.png
Примечание
В SA-MP функция открывает файлы в каталоге scriptfiles. Например, если сервер находится в папке C:\MyServer и функции fopen указано имя MyFile.txt, то функция откроет файл C:\MyServer\scriptfiles\MyFile.txt.
Тем не менее, можно заставить функцию вместо scriptfiles открыть файл в другом каталоге, указав перед именем файла .\ для перехода на уровень вверх (в корневую папку сервера) и название каталога. Например, название .\myfolder\MyFile.txt заставит сервер открыть файл C:\MyServer\myfolder\MyFile.txt.


Exclamation.png
Внимание!
После открытия файла не забывайте проверять возвращаемый функцией хендл (см. пример ниже). Если функция не сможет открыть файл и вернёт нулевой хендл (File:0), попытка использования такого хендла в других файловых функциях приведёт к падению сервера.


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

main()
{
    new File:f = fopen("myfile.txt", io_read);

    // Проверим, удалось ли открыть файл.
    if (f == File:0)
    {
        printf("Не удалось открыть файл!");
    }
    else
    {
        new buffer[128];
        new len;
        new linenum = 1;

        // Считываем строки, пока не достигнем конца файла.
        while ((len = fread(f, buffer)) != 0)
        {
            // fread() считывает строку вместе с '\n' на конце - убирём этот знак
            // из конца строки, чтобы не выводить лишний перенос в printf().
            buffer[len-1] = '\0';

            // Выводим номер строки и её содержимое.
            printf("%03d: %s", linenum++, buffer);
        }

        // Не забываем закрыть файл.
        fclose(f);
    }
}


См. также: