dirReader Плагин
Я использовал для хранения имён файлов - файл .txt, зная, что там было, но это стало мне надоедать, так вот я и подумал, почему бы не сделать плагин? dirReader это простой, но довольно эффективный и полезный плагин, который имеет возможность считывать файлы в директории с использованием шаблона (используя библиотеку fnmatch) с парой полезных флагов. Вы можете найти подробное описание здесь.
Лог изменений:
- 03/07/2013 - 14:02:
- Добавлен новый флаг для игнорирования директории:
PHP код:
#define DR_NO_DIR (1 << 6) // Пропуск директории
- 03/07/2013 - 01:35:
Флаги
PHP код:
#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)
Нативные функции
PHP код:
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));
Пример(ы)
Если вы запустите следующий код:
PHP код:
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. Теперь давайте изменим шаблон:
PHP код:
drHandle = dirReader_open("scriptfiles/", "*.ZX", DR_NO_DIR); // Директории будут проигнорированы
Будут показаны все файлы (кроме каталогов) заканчивающихся на .ZX, не .zx. Потому, что нет игнорирования регистр букв. Мы должны использовать флаг, чтобы сделать его игнорируемым:
PHP код:
drHandle = dirReader_open("scriptfiles/", "*.ZX", DR_NO_DIR | FNM_CASEFOLD); // Директории и регистр букв будут проигнорированы
Будут показаны все файлы, оканчивающиеся как на .ZX так и на .zx. Вы можете переключаться с другими флагами, с помощью побитого оператора ИЛИ ('|'). Рассмотрим следующий пример:
PHP код:
drHandle = dirReader_open("scriptfiles/", "R*", DR_NO_DIR | FNM_CASEFOLD);
Будут показаны все файлы (кроме каталогов), которые начинаются с "R" или "r". В любом случае вы получите одно и тоже.
Несколько замечаний здесь:
- Каталоги также перечисляются, если вы не используете DR_NO_DIR.
- .zx в данном примере являются расширением файлов.
- Вы можете использовать подстановки для поиска определенных строк, например: "*a*b*.txt".
- Вы можете прочитать файлы из корневого каталога, просто перейдя в "scriptfiles/" (как я сделал), чтобы начать оттуда.
- Так же возможно прочитать из других дисков, таких как "C:\", но я сомневаюсь, что кто-то нуждается в этом.
Загрузка
Windows и Linux (CentOS) (исходный код + плагин + инклюд)
Автор: RyDeR`
Перевод: Londlem
Оригинал: http://forum.sa-mp.com/showthread.php?t=448075
Специально для: Pro-Pawn.Ru
Копирование данной статьи без разрешения автора запрещено!