php рекурсивный обход папок
Рекурсивный просмотр папок и файлов
Как сделать чтобы заходил в поддиректории?
Добавлено через 15 минут
открывает только первую попавшуюся папку. Все остальные пропускает
Добавлено через 50 минут
что неправильно в коде?
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Рекурсивный поиск папок, подпапок и файлов
Здравствуйте, Есть программа которая ищет папки, подпапки и файлы, как можно сделать, чтобы все.
понятно,
Добавлено через 36 секунд
return лишний
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Просмотр скрытых файлов и папок с помощью DirListBox and FileListBox
Есть два объекта DirListBox и FileListBox когда с помощью них рассматриваешь своё барахло, то не.
Рекурсивный поиск папок
Люди, хепл плиз. Бьюсь второй день. Есть скрипт: MsgBox ShowFolderList («c:\temp») function.
Рекурсивный обход дерева папок
Вот код рекурсивного обхода всех папок в директории : procedure FindFiles(const DirPath: string;.
Excel / Очистка конкретный папок от старых папок и файлов с исключением
Доброго времени суток! Excel: Есть ListBox (в коде ListDel), в котором мы создаем список папок.
Как сделать функцию рекурсивного обхода вложенных директорий?
Имеется группа директорий, вложенных одна в другую, причем возможно ветвление, когда из каких-то директорий начинаются две и более ветвей.
Вот пример структуры:
Каталог
Каталог/Wova
Каталог/Wova/Форд
Каталог/Wova/Форд/Купе
Каталог/Wova/Форд/Купе/4 двери
Каталог/Wova/Форд/Купе/двудверный
Каталог/Wova/Форд/седан
Каталог/Wova/Форд/седан/4 двери
Каталог/Wova/Форд/седан/5 дверей
В каждой директории лежит файл data.txt, в котором записано некое число.
Требуется для каждой директории подсчитать сумму чисел, записанных в лежащих в них файлах data.txt (включая те, что находятся во вложенных папках).
Применительно для данного примера это выглядит так:
— для директории «Каталог» сумму вообще из всех файлов;
— для директории «Каталог/Wova» сумму из файлов в директориях Каталог/Wova, Каталог/Wova/Форд, Каталог/Wova/Форд/Купе, Каталог/Wova/Форд/Купе/4 двери, Каталог/Wova/Форд/Купе/двудверный, Каталог/Wova/Форд/седан, Каталог/Wova/Форд/седан/4 двери, Каталог/Wova/Форд/седан/5 дверей;
— для директории «Каталог/Wova/Форд/Купе» сумму из файлов Каталог/Wova/Форд/Купе,
Каталог/Wova/Форд/Купе/4 двери, Каталог/Wova/Форд/Купе/двудверный;
— для директории «Каталог/Wova/Форд/Купе/4 двери» только из самого этого каталога;
— для директории «Каталог/Wova/Форд/Купе/двудверный» только из самого этого каталога;
— для директории «Каталог/Wova/Форд/седан» сумму из файлов в Каталог/Wova/Форд/седан, Каталог/Wova/Форд/седан/4 двери и Каталог/Wova/Форд/седан/5 дверей;
— для директории «Каталог/Wova/Форд/седан/4 двери» только из самого этого каталога;
— для директории «Каталог/Wova/Форд/седан/5 дверей»только из самого этого каталога.
Хочется прежде всего понять, имеет ли такая задача решение в принципе?
А если решение имеет, то как это сделать, каким конкретно кодом?
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Рекурсивный проход по всем папкам и удаление файла по имени
Пытаюсь сделать скрипт для который бы проходил по всем папкам на сервере и удалял файл с нужным именем
Вот склепал из кусков кода что-то похожее, но удаляет только в стартовой директории, в остальных не удаляет.
Помогите разобраться, что не так
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Распределение файлов по папкам созданных как часть имени файла
Добрый день. Прошу подсказать в решении такой задачки. Есть 1 500 000 файлов с именами типа.
Рекурсивный проход
Рекурсивный проход по всем каталогам в заданной директории, удалить все файлы из директории.
Решение
Круто, даже не знал о таком
А если надо указать корневой каталог, точку поставить в директориях?
Решение
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Рекурсивный поиск и удаление каталога. Пробелы в имени каталога
Со вторым днем зимы всех. Есть bat: @echo off rem unsvn.bat setlocal rem.
Проход по всем TextBox
Мне нужно перевести слледующее в С# (Спасибо) For Each xTextBox In Me.Controls If.
Проход по всем полям таблицы
Помогите народ!! Есть 2 таблицы(Q1 и T3). В одной из них (T3) есть поле «srok» в которое вводится.
Проход по всем узлам treeView
Помогите пройтись по всем узлам дерева. Есть treeView в которое при помощи кнопочки добавляются.
Список всех файлов и папок в каталоге с рекурсивной функцией PHP
Я пытаюсь пройти через все файлы в каталоге, и если есть каталог, пройти через все его файлы и так далее, пока нет больше каталогов, чтобы перейти. Каждый обработанный элемент будет добавлен в массив результатов в функции ниже. Это не работает, хотя я не уверен, что я могу сделать / что я сделал неправильно, но браузер работает безумно медленно, когда этот код ниже обрабатывается, любая помощь приветствуется, спасибо!
13 ответов:
выход (пример) :
это принесет вам все файлы с путями.
это более короткая версия:
выход (пример) :
предложение Джеймса Кэмерона.
вы можете только извлечь путь к файлу, который вы можете сделать так:
еще 4 строки кода, но более прямо вперед, чем с помощью цикла или что-то в этом роде.
вот модифицированная версия ответа Hors, работает немного лучше для моего случая, поскольку он удаляет базовый каталог, который передается по мере его прохождения, и имеет рекурсивный переключатель, который может быть установлен в false, что также удобно. Кроме того, чтобы сделать вывод более читаемым, я разделил файлы файлов и подкаталогов, поэтому сначала добавляются файлы, а затем файлы подкаталогов (см. Результат Для того, что я имею в виду.)
наслаждайтесь! Хорошо, вернемся к программе, в которой я на самом деле использую это.
Это решение сделало работу для меня. RecursiveIteratorIterator перечисляет все каталоги и файлы рекурсивно, но несортированные. Программа фильтрует список и сортирует его.
Я уверен, что есть способ, чтобы написать это Короче, не стесняйтесь, чтобы улучшить его. Это просто фрагмент кода. Вы можете использовать его в своих целях.
Рекурсивный обход директории с помощью итераторов
Как-то на работе нужно мне было обойти директорию и удалить все файлики в ней, юзать для этого консоль я не мог. Все надо было делать на чистом php. Удалить просто не пустую директорию, как Вы знаете нельзя, надо удалить всё, что в ней, а потом удалить её.
Я попытался разобраться в этом вопросе, и всё что узнал делюсь.
Сначала я просто попытался пройтись по одной директории не исполmзуя рекурсию разными методами для определения удобства использования и скорости работы.
Проход директории с помощью родных методов
К родным (native) методам я отнес функции opendir(), closedir(), readdir() и rewinddir(). Больше казать об этих ф-циях нечего, чистая классика. Открыли каталог (если он существует), получили дескриптор (указатель) на него и начинаем с ним работать, по окончанию желательно закрыть каталог.
К родным методам я отношу те, которые существует в голом ядре, т.е. если отключить все расширения и эти ф-ции, классы существуют, то я их называю родными или нативными. Например класс или ф-ции по работе с Memcache существуют если подключено соответствующее расширение, следовательно такие вещи родными назвать нельзя.
Проход директории с помощью предопределенного класса dir()
Предопределенных классов довольно много, они или являются родными, как класс dir(), Exception, Reflection, или такие которые подключаются с помощью соот. библиотек — mysqli, curl, GD и тд
Методы класса dir()
Название метода | Описание метода |
path | путь к директории |
handle | ресурс, дескриптор |
close() | закрыть директорию |
rewind() | сброс дескриптора в начало директории |
read() | Чтение одного элемента директории и передвигаем указатель на одну позицию вниз. |
Проход директории с помощью Итератора (DirectoryIterator)
Что есть итератор хорошо описано в Википедии не буду копи-пастить…
Класс DirectoryIterator реализует интерфейс итератора (могут проходить коллекцию в цикле foreach).
У данного класса уж очень много методов для работы с файлами и/или директориями. Постараюсь их все здесь описать. Некоторые из приведенных ниже относятся только в Unix подобным системам.
Методы класса DirectoryIterator()
Название метода | Описание метода |
getFilename() | возврат имени файла или поддиректории |
getBasename() | похож на getFilename(), но может удалять суфикс,если таковой передать в виде параметра * |
isDot() | Определяет является ли текущий элемент «.» или «..» |
rewind() | сброс указателя на первый элемент |
valid() | проверка является ли текущий элемент правильным файлом. Честно не понял. |
key() | возврат ключа текущего элемента |
current() | возврат текущего элемента |
next() | на 1 шаг вперед передвигает указатель |
__toString() | оопшный метод, приводит свойство к строке |
getPath() | возврат просто имени директории/файла и все |
getPathname() | возврат пути к файлу/директории+само название |
getPerms() | возврат прав доступа только для UNIX |
getInode() | х.з. что это, судя по названи наверное какое-то имя узла, думаю только для UNIX |
getSize() | размер файла в байтах, для директории всегда ноль |
getOwner() | возврат имя владельца, только для UNIX |
getGroup() | возврат ИД группы, только для UNIX |
getATime() | последний доступ к файлу/директории в сек (начало с 1970) |
getMTime() | последний модификации файла/директории в сек (начало с 1970) |
getCTime() | последний изменения к файла/директории в сек (начало с 1970) |
getType() | возрат dir или file для сотв элемента. |
isWritable() | думаю понятно из названия, возврат истина/ложь |
isReadable() | думаю понятно из названия, возврат истина/ложь |
isExecutable() | думаю понятно из названия, возврат истина/ложь |
isFile() | думаю понятно из названия, возврат истина/ложь |
isDir() | думаю понятно из названия, возврат истина/ложь |
isLink() | думаю понятно из названия, возврат истина/лож,только для UNIX |
getLinkTarget() | для данных методов не нашел описание даже на оф.сайте. |
getRealPath() | для данных методов не нашел описание даже на оф.сайте. |
getFileInfo() | для данных методов не нашел описание даже на оф.сайте. |
getPathInfo() | для данных методов не нашел описание даже на оф.сайте. |
openFile() | для данных методов не нашел описание даже на оф.сайте. |
setFileClass() | для данных методов не нашел описание даже на оф.сайте. |
setInfoClass() | для данных методов не нашел описание даже на оф.сайте. |
* — за подробностями обращайтесь к официальной документации.
Рекурсивный обход директории с помощью родных методов
Рассмотрев как можно пройтись по директории теперь рассмотри как можно пройтись абсолютно по всему каталогу.
Рекурсивный обход директории с помощью итератора (RecursiveDirectoryIterator)
Решение для обхода каталога на ООП нашлось и его скрипт ниже.
Красиво, всего одна строка, два класса и полный набор данных.
Другие методы которые есть у данного класса даже не описаны на оф. сайте.
Тесты
Как я их проводил. В цикле (1000) я засекал время перед открытие директории и после её закрытия. Затем я высчитывал среднее арифметическое. Т.к. результаты сильно зависят от железа (винчестера и др параметров), то приводить просто время в секундах не кошерно, поэтому я перевел их проценты. За 100% я принял время работы родных функций.
Как видно нативные почти всегда рулят, но и не так далеко отстают ООПшные фичи.
Кто что будет юзать — уж дело личное.
UPD
Прошу прощения у общественности, я не верно провел тест с рекурсивным обходом.
Вот более детальные данные.
native — 100%
RecursiveDirectoryIterator — 185%
Как видно нативные фичи всегда рулят!
Статья просмотренна 90372 раз, зашло посетителей 24066
641 10 комментариев http%3A%2F%2Fblog.nagaychenko.com%2F2010%2F11%2F15%2F%25d1%2580%25d0%25b5%25d0%25ba%25d1%2583%25d1%2580%25d1%2581%25d0%25b8%25d0%25b2%25d0%25bd%25d1%258b%25d0%25b9-%25d0%25be%25d0%25b1%25d1%2585%25d0%25be%25d0%25b4-%25d0%25b4%25d0%25b8%25d1%2580%25d0%25b5%25d0%25ba%25d1%2582%25d0%25be%25d1%2580%25d0%25b8%25d0%25b8-iterator%2F %D0%A0%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D1%8B%D0%B9+%D0%BE%D0%B1%D1%85%D0%BE%D0%B4+%D0%B4%D0%B8%D1%80%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D0%B8%D0%B8+%D1%81+%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E+%D0%B8%D1%82%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%BE%D0%B2 2010-11-15+09%3A00%3A14 maxnag http%3A%2F%2Fblog.nagaychenko.com%2F%3Fp%3D641 в “Рекурсивный обход директории с помощью итераторов”
Конечно все зависит от поставленных задач, но RecursiveDirectoryIterator сильно начинает тормозить при глубине вложения директорий, хотя бы 3. Причем, оставание начинает рости в геометрической прогрессии при увеличении степени вложенности директорий.
Не знаю, как дела обстоят в php5.3.3 (как-то задач подобных не попадалось), но в свое время тестировал на php5.3.1 и все было довольно плохо.
Т.е. если вам не критично время выполнения скрипта и директорий не много, то использование RecursiveDirectoryIterator оправданно. Все просто и лаконично. Иначе, стоит 100 раз подумать прежде, чем использовать.
Как-то не заметил. Проверю, самому интересно.
Спасибо за каммент
спасибо за толковые выкладки. а где можно применить рекурсивные функции подобного рода, кроме как под конкретную задачу?
Я всегда её применял для удаления данных в каталоге, х.з. какой уровень вложенности у тебя будет.
Больше я нигде не применял подобного рода ф-ции.
В БД при работе с камментами я не юзаю рекурсию, это очень наклдадно, использую другие известные методы.
Спасибо за ценную инфу на русском!
Надо различать задачи.
opendir — возвращает список файлов в директории.
RecursiveDirectoryIterator — возвращает ОБЪЕКТЫ. У которых есть свойства (размер, тип, права, владелец, группа и т.д.).
Если необходимо всё это, то костыли с opendir займут куда больше процессорного времени. Рекомендую добавить это в статью, и не вводить людей в заблуждение.
Мне кажется я четко описал, кто есть кто
К родным (native) методам я отнес функции opendir(), closedir(), readdir() и rewinddir(). Больше казать об этих ф-циях нечего, чистая классика.
Класс DirectoryIterator реализует интерфейс итератора …. Методы класса DirectoryIterator()
Тут чётко видно, кто есть ф-ция, а кто класс с методами? Что не так с Вашей точки зрения я не так сделал?
Да, видно. Было бы странно, если бы было непонятно, но проведённые тесты не совсем верны по описаным выше причинам. Попробуйте что нибудь такое сделать на родных методах, и с помощью DirectoryIterator:
https://dl.dropbox.com/u/585714/screenshots/Selec…
Результаты, я думаю, Вас удивят.:)
Что за дебильная привычка именовать переменные вроде idir? Что в этом сокращении содержится? Мы-ж не криптографы, а программисты. Правильно directoryIterator
Это не «дебильная привычка» — это опыт, например я понятие не имею какой тип данных в этой переменной, а по её названию я, иногда, могу понять, что i — это iterator. Также когда юзаешь название класса, у которого есть интерфейс часто пишут IClassName и первая буква означает Interface.
Ты можешь называть как угодно, но когда ты работаешь в команде, в большой компании есть этика и разные рекомендации по наименованию всего и вся и этому надо следовать.