AZJIO
Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору NIKZZZZ У меня снова появилась необходимость использовать ваш принцип поиска файлов, то есть не весь список сразу, а с возможностью например приостановить поиск и в дальнейшем продолжить. Или случай, когда во время поиска найден нужный файл (по содержимому) и нет необходимости продолжать. Обычно первый запрос поиска формирует кэш и это происходит длительно, даже если поиск файлов происходит за 5 сек, то первый запрос может происходить с минуту и более, поэтому ваш принцип всё же имеет место быть полезым. Есть аналог с функцией обратного вызова, но мне не нравится такой подход из-за проблем обфускации с функций "Call". По поводу модернизации: 1. Функция позиционируется как ; AutoIt Version : 3.2.3++, тогда строка Код: If StringInStr(FileGetAttrib($avStack[$avStack[0] + 3] & "\" & $sFindFile), "D") > 0 Then | можно заменить на Код: 2. Массив $avStack использует сдвиг на 5. Не проще ли сделать 2D-массив $avStack[1][5], тогда на придётся суммировать индекс для смещения. 3. Массив $avStack постоянно использует ReDim. А есть ли смысл в этом, не проще ли создать массив $avStack[123][5] на 123 элемента - максимальная вложенность каталогов, а в качестве текущей позиции использовать индекс. То есть данные могут быть заполнены до 10 элементов массива, но если я поднялся на 2 уровня вверх я просто использую предыдущий индекс 8, а выше уже просто пустышки, которые могут быть переписаны последующими вызовами погружения во вложенные каталоги. 4. Пока не пойму почему шаг данных 5, а не 2, ведь маску и другие входные данные можно хранить в первых ячейках массива, например первые 3 индекса забронировать на входные данные, а с 4-го и выше - хранение декскриптора и пути. Как только счётчик индекса стал меньше минимального (4), то поиск завершён. Вот первый пример модернизации http://pastebin.com/v1CsLhKZ | Всего записей: 4413 | Зарегистр. 03-05-2006 | Отправлено: 04:45 13-09-2013 | Исправлено: AZJIO, 08:08 13-09-2013 |
|