Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 1 из 1

Тема: dirReader

  1. #1
    Аватар для L0ndl3m
    Пользователь

    Статус
    Оффлайн
    Регистрация
    19.10.2013
    Адрес
    Ярославль
    Сообщений
    1,366
    Репутация:
    774 ±

    dirReader

    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 DRdirReader_open(szName[], szPattern[], const iFlags);
    native dirReader_close(DRdrHandle);
    native dirReader_getCount(DRdrHandle);
    native dirReader_getFileAtIndex(DRdrHandle, const iIdxszBuf[], const iSize sizeof(szBuf)); 
    Пример(ы)

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

    PHP код:
    new
        
    DRdrHandle,
        
    szBuf[32],
        
    iCount
    ;

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

    for(new 0iCount; ++i)
    {
        
    dirReader_getFileAtIndex(drHandleiszBuf); // Получает файл с индеком
        
    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

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

  2. Пользователь сказал cпасибо:
    $continue$ (22.07.2015)
 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •