Что это такое? Для чего он требуется?
Это инклуд, содержащий функции для чтения/записи файлов.
Чем он вам пригодиться?
Оформление файла
Скрытый текст [Показать]
Скорость
Скрытый текст [Показать]
Функции инклуда
Создание файла:
ini_createFile("адрес/файла.ini", "Содержимое файла по умолчанию");
//или
ini_createFile("адрес/файла.ini");
//создаст файл если его нету, иначе вернет код ошибки
Открытие файла:
ini_openFile("путь/к/файлу.ini");//откроет файл если он сущ-ет, иначе вернет код ошибки
Закрытие/сохранение файла:
ini_closeFile(ID_открытого_файла);
Запись текста в файл:
ini_setString(ID_открытого_файла, "имя ключа", "текстовое значение");
Запись числа в файл:
ini_setInteger(ID_открытого_файла, "имя ключа", 123456);
Запись float значения в файл:
ini_setFloat(ID_открытого_файла, "имя ключа", 3.1416);
Чтение текста из файла:
ini_getString(ID_открытого_файла, "имя ключа", returnValue);
Чтение числа из файла:
ini_getInteger(ID_открытого_файла, "имя ключа", returnValue);
Чтение float значения из файла:
ini_getFloat(ID_открытого_файла, "имя ключа", returnValue);
Удаление ключа из файла:
ini_removeKey(ID_открытого_файла, "имя ключа");
Вернуть код ошибки:
ini_removeKey(ID_открытого_файла, "имя ключа");
Доп. Функции, потребующиеся для работы (DEFAULT):
Проверка на существование файла:
fexist("адрес/файла.ini");
Удаление файла:
fremove("адрес/файла.ini");
Также можно добавить пару дефайнов:
#define ini_existFile fexist #define ini_removeFile fremove
для удобство использования, например:
ini_existFile("адрес/файла.ini");//Проверка на существование файла
ini_removeFile("адрес/файла.ini");//Удаление файла
Дополнительные нестандартные функции которые могут пригодиться (DEFAULT):
#define ini_setBool(%1,%2,%3) %3?ini_setInteger(%1,%2,1):ini_setInteger(%1,%2,0)
stock ini_getBool(fileID,key[],&bool:Value)
{
new testint;
ini_getInteger(fileID,key,testint);
if(testint <= 0) Value = false;
else Value = true;
return 1;
}
C помощью этих функций вы сможете записать/прочитать из файла бинарные значения(true & false).
Пример:
new file = ini_createFile("тест_инклуда.ini");
new returnString[32], returnNumber, Float: returnFloat;
ini_setString(file, "ключ со строкой", "текстовое значение");
ini_setInteger(file, "ключ с числом", 123456);
ini_setFloat(file, "ключ с дробью", 3.1416);
ini_getString(file, "ключ со строкой", returnString);
ini_getInteger(file, "ключ с числом", returnNumber);
ini_getFloat(file, "ключ с дробью", returnFloat);
ini_closeFile(file);
printf ( "\n `ключ_со_строкой` = `%s`,\n `ключ_с_числом` = `%d`,\n `ключ_с_дробью` = `%f` \n",
returnString, returnNumber, returnFloat);
Регистрация с помощью mxINI:
public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/mycommand", cmdtext, true, 10) == 0)
{
return 1;
}
if(strcmp( cmdtext, "/register", true, 9) == 0)// если игрок ввел в чате /register
{
new FileName[30];GetPlayerName(playerid, FileName, 30);// узнаем ник игрока
format(FileName, 30, "%s.ini", FileName);
if(fexist(FileName)) return SendClientMessage(playerid, 0xFF00000AA, " * Этот аккаунт уже зарегистрирован! Выбери другой ник.");// если файл для этого ника уже существует
if(cmdtext[9] == 0 || cmdtext[10] == 0) return SendClientMessage(playerid, 0xFF00000AA, " * Не указан пароль! Формат: /register пароль");// если не указан пароль
new File = ini_createFile(FileName);// создадим файл с именем игрока
if (File >= 0) // если файл создан
{
ini_setString(File, "Пароль", cmdtext[10]);
ini_closeFile(File);
SendClientMessage( playerid, 0x00FF00AA, " * Аккаунт успешно зарегистрирован! Используй /login, чтобы войти в него." );
return 1;
}else{
// если не удалось создать файл
SendClientMessage( playerid, 0xFF00000AA, " * Не удалось создать файл для аккаунта! Попробуй еще раз. " );
printf("%s", ini_getErrorInfo(File));//выведем описание ошибки в лог
return 1;
}
}
if(strcmp( cmdtext, "/login", true, 6) == 0)// если игрок ввел в чате /register
{
new FileName[30];GetPlayerName(playerid, FileName, 30);// узнаем ник игрока
format(FileName, 30, "%s.ini", FileName);
if(!fexist(FileName)) return SendClientMessage(playerid, 0xFF00000AA, " * Этот аккаунт не зарегистрирован! Введите /register пароль.");// если файл для этого ника не существует
if(cmdtext[6] == 0 || cmdtext[7] == 0) return SendClientMessage(playerid, 0xFF00000AA, " * Не указан пароль! Формат: /login пароль");// если не указан пароль
new File = ini_openFile(FileName);// откроем файл с именем игрока
ini_getString(File, "Пароль", FileName);
ini_closeFile(File);
if(strcmp(cmdtext[7], FileName, true, 10) == 0)
{
SendClientMessage( playerid, 0x00FF00AA, " * Вы успешно вошли.");
}else return SendClientMessage(playerid, 0xFF00000AA, " * Не верный пароль!");
}
return 0;
}
Тест скорости между инклудами (Dini VS Fini VS MxINI):
Как проходит тест:
Каждой библиотеке нужно будет создать и открыть INI файл, записать в него 100 ключей, прочесть значения этих ключей, закрыть файл. Для точных показаний, тест проходит 5 раз подряд.
Вот результаты:
Все показания в миллисекундах (1 секунда = 1000 миллисекунд (ms)
Скрытый текст [Показать]
Ссылки:
Исходник на PASTEBIN.COM
FS для тестирования
Автор урока: Frog163
Вход
Регистрация
Помощь















