PDA

Просмотр полной версии : [Plugin] dirReader



L0ndl3m
20.05.2014, 23:43
dirReader Плагин

Я использовал для хранения имён файлов - файл .txt, зная, что там было, но это стало мне надоедать, так вот я и подумал, почему бы не сделать плагин? dirReader это простой, но довольно эффективный и полезный плагин, который имеет возможность считывать файлы в директории с использованием шаблона (используя библиотеку fnmatch) с парой полезных флагов. Вы можете найти подробное описание здесь (http://www.cs.utah.edu/dept/old/texinfo/glibc-manual-0.02/library_9.html).

Лог изменений:

03/07/2013 - 14:02:

Добавлен новый флаг для игнорирования директории:

#define DR_NO_DIR (1 << 6) // Пропуск директории

03/07/2013 - 01:35:
Первый выпуск


Флаги


#define FNM_PATHNAME (1 << 0)
#define FNM_NOESCAPE (1 << 1)
#define FNM_PERIOD (1 << 2)
#define FNM_LEADING_DI (1 << 3)
#define FNM_CASEFOLD (1 << 4)
#define FNM_EXTMATCH (1 << 5)
#define DR_NO_DIR (1 << 6)


Нативные функции



native DR: dirReader_open(szName[], szPattern[], const iFlags);
native dirReader_close(DR: drHandle);
native dirReader_getCount(DR: drHandle);
native dirReader_getFileAtIndex(DR: drHandle, const iIdx, szBuf[], const iSize = sizeof(szBuf));


Пример(ы)

Если вы запустите следующий код:



new
DR: drHandle,
szBuf[32],
iCount
;

drHandle = dirReader_open("scriptfiles/", "*", 0); // Обратите внимание, нет флага
iCount = dirReader_getCount(drHandle); // Эффективное получение общего количества файлов подходящего шаблона

for(new i = 0; i < iCount; ++i)
{
dirReader_getFileAtIndex(drHandle, i, szBuf); // Получает файл с индеком
printf("%s", szBuf); // Печатает файл с индексом
}
dirReader_close(drHandle);


Будут отображены все файлы (включая каталоги) в папке scriptfiles. Теперь давайте изменим шаблон:


drHandle = dirReader_open("scriptfiles/", "*.ZX", DR_NO_DIR); // Директории будут проигнорированы

Будут показаны все файлы (кроме каталогов) заканчивающихся на .ZX, не .zx. Потому, что нет игнорирования регистр букв. Мы должны использовать флаг, чтобы сделать его игнорируемым:


drHandle = dirReader_open("scriptfiles/", "*.ZX", DR_NO_DIR | FNM_CASEFOLD); // Директории и регистр букв будут проигнорированы

Будут показаны все файлы, оканчивающиеся как на .ZX так и на .zx. Вы можете переключаться с другими флагами, с помощью побитого оператора ИЛИ ('|'). Рассмотрим следующий пример:


drHandle = dirReader_open("scriptfiles/", "R*", DR_NO_DIR | FNM_CASEFOLD);

Будут показаны все файлы (кроме каталогов), которые начинаются с "R" или "r". В любом случае вы получите одно и тоже.

Несколько замечаний здесь:


Каталоги также перечисляются, если вы не используете DR_NO_DIR.
.zx в данном примере являются расширением файлов.
Вы можете использовать подстановки для поиска определенных строк, например: "*a*b*.txt".
Вы можете прочитать файлы из корневого каталога, просто перейдя в "scriptfiles/" (как я сделал), чтобы начать оттуда.
Так же возможно прочитать из других дисков, таких как "C:\", но я сомневаюсь, что кто-то нуждается в этом.


Загрузка

Windows и Linux (CentOS) (исходный код + плагин + инклюд) (http://s7.soliddl.com/Yjc0YzAyZDc2NTAyODg3NTIwMjQ5MTcxNzRlMzJhMjFhYWU3MWQyMToxV21vcDA6X1hWUWNKUHFQbEdKcEd5a1ZRZFlJTUFtWms0/5d3cfd061d/dirReader.zip)


Автор: RyDeR`
Перевод: Londlem (http://pro-pawn.ru/member.php?2057-Londlem)
Оригинал: http://forum.sa-mp.com/showthread.php?t=448075 (http://forum.sa-mp.com/showthread.php?t=448075)

Специально для: Pro-Pawn.Ru (http://pro-pawn.ru)

Копирование данной статьи без разрешения автора запрещено!