Итак, пока у меня есть время решил написать урок по работе с файлами с помощью встроенных в SA-MP функций, я не буду углубятся в них, а просто опишу как можно записать/прочитать в/из файла данные
Начнём мы пожалуй с перечисления тех самых функций с которыми мы будим работать
Такт 1. Описание функций
fopen(const name[], filemode: mode = io_readwrite); функция служит для открытия файла и передачи ссылки на него для дальнейшей работы входными параметрами являются:
name[] - имя отрываемого файла, включает и путь до него filemode - способ открытия, по умолчанию io_readwrite, давайте поподробнее рассмотрим все способы
Quote
io_read - открывает файл с возможностью чтения, если файл не существует то произойдёт краш сервера io_write - открывает файл и перезаписывает всё его содержимое io_readwrite - открывает файл с возможностью чтения/записи, если файл не существует, то создаёт его io_append - открывает файл с возможностью дозаписи файла, если файл не существует, создаёт его
fclose(File: handle); Функция служит для закрытия работы с файлом
fread(File: handle, string[], size = sizeof string, bool: pack = false); Функция служит для чтения построчно данных из файла
входными параметрами являются: handle - ссылка полученная функцией fopen string[] - массив куда будут записываться считанные данные size - количество считываемых в строке байт pack - запаковывать-ли строку(возможно неправильно понял ТК это и не использовал)
fexist(const pattern[]); Функция служит для проверки существования файла pattern[] - имя проверяемого файла включающее в себя и путь до файла
Ну чтож, на этом я думаю пока что стоит закончить, ТК эти функции являются самыми важными для нас
Такт 2. Примеры
Давайте приведём пример чтения и записи строки в/из файла:
Пример чтения строки из файла
Quote
stock ReadOneString(file[],tostring[]) { if(!fexist(file)) return -1; /* проверяем наличие файла file, если он не существует то прекращаем выполнение функции и возвращаем значение -1 */
new File:opnfile; // создаём файловую переменную opnfile=fopen(file,io_read); /* открываем файл file с возможностью чтения и записываем его идентификатор в opnfile */ fread(opnfile,tostring); // читаем первую строку из файла и записываем её в tostring fclose(opnfile); // закрываем работу с файлом return 1; // возвращаем 1 давая знать что всё прошло успешно }
Пример записи строки в файл
Quote
stock WriteOneString(tofile[],string[]) { new File:opnfile; // создаём файловую переменную opnfile=fopen(tofile,io_append); /* Открываем файл с параметром io_append, в данном случае он больше всего подходит */ fwrite(opnfile,string); // записываем в файл строку string fclose(opnfile);// закрываем работу с файлом return 1; // возвращаем 1 давая знать что всё прошло успешно }
Урок 2. (освоение)
В этом уроке мы опишем остальные стандартные функции по работе с файлами
Такт 1. Описание функций
fputchar(File: handle, value, bool: utf8 = true); Функция служит для записи символа в файл, в случае успешной записи вернёт true, иначе false handle - ссылка полученная функцией fopen value - записываемый символ utf8 - включена-ли поддержка utf8
fgetchar(File: handle, value, bool: utf8 = true); Функция служит для чтения символа из файла handle - ссылка полученная функцией fopen value - идентификатор в который запишется utf8 - включена-ли поддержка utf8
stock WriteMoreString(tofile[],string[]) { new File:opnfile; // создаём файловую переменную opnfile=fopen(tofile,io_append); /* Открываем файл с параметром io_append, в данном случае он больше всего подходит */ for(new i=0;i<10;i++){ fwrite(opnfile,string); // записываем в файл строку string 10 раз } fclose(opnfile);// закрываем работу с файлом return 1; // возвращаем 1 давая знать что всё прошло успешно }
[pwn]stock ClanCheck(playerid) { new player[MAX_PLAYER_NAME]; new filestr[128]; GetPlayerName(playerid, player, sizeof player); new File:file = fopen("Clan.dat",io_read); if (file) { while(fread(file,filestr,sizeof(filestr))) { if (strfind(filestr, player, true) == -1) { SendClientMessage(playerid, COLOR_RED, "|- Вы не состоите в клане [RD], уберите тэг из ника! -|"); return Kick(playerid); } } } return true; }[/pwn]
1 час моей работы стоит минимум 800 рублей для срочных работ. Знаю CodeIgniter, Kohana, втч. кастом(php), Вникаю в Yii. jQuery на должном уровне, немного разбираюсь в RightJS. Алсо, 6 лет павно, 2 года в шарпе, понимаю си и плюсы. Немного ассемблер. Ох**тельный верстальщик какб.
Если ваш заказ потребует неделю работы и вы собираетесь заплатить 100 рублей - лес там ->> ^^^^^
XAOC, просто файл все время меняется, и массив определить каким-то числом нельзя
1 час моей работы стоит минимум 800 рублей для срочных работ. Знаю CodeIgniter, Kohana, втч. кастом(php), Вникаю в Yii. jQuery на должном уровне, немного разбираюсь в RightJS. Алсо, 6 лет павно, 2 года в шарпе, понимаю си и плюсы. Немного ассемблер. Ох**тельный верстальщик какб.
Если ваш заказ потребует неделю работы и вы собираетесь заплатить 100 рублей - лес там ->> ^^^^^
XAOC, тогда будет лишние 300-700 строк в любом случае методом эксперимента все решается
1 час моей работы стоит минимум 800 рублей для срочных работ. Знаю CodeIgniter, Kohana, втч. кастом(php), Вникаю в Yii. jQuery на должном уровне, немного разбираюсь в RightJS. Алсо, 6 лет павно, 2 года в шарпе, понимаю си и плюсы. Немного ассемблер. Ох**тельный верстальщик какб.
Если ваш заказ потребует неделю работы и вы собираетесь заплатить 100 рублей - лес там ->> ^^^^^
GhostTT, ты думаешь, я в майские праздники писать что-то планировал, я только пъянки спланировал.
Добавлено (12.05.2009, 22:53) --------------------------------------------- Косяк в павно, эта сука не различает регистр при работе с файлами создайте в папке scriptfiles фаил test добавте код: [pwn]public OnGameModeInit() { printf("%d",fexist("Test")); printf("%d",fexist("test")); return 1; }[/pwn]и проверте что выдаст
Добавлено (12.05.2009, 23:52) --------------------------------------------- Я обошёл этот баг
И создал Бог женщину!.. Существо получилось злобное, но симпатичное...
Сообщение отредактировал stepmex - Вторник, 12.05.2009, 22:55