Подскажите код перебора файлов и каталогов в папке

Статус
В этой теме нельзя размещать новые ответы.

dump1111

Участник
Регистрация
7 Июл 2009
Сообщения
266
Реакции
8
Подскажите как решить такую задачу. Имеется папка и в ней .txt файлы и папки, в которых также находятся другие .txt файлы и могут находится другие папки и т.д. Нужно последовательно перебрать каждый файл в папке в во всех подпапках.
 
Самый тупой вариант для PHP4 без итераторов, без ничего.
Разберешься.
PHP:
$files = array();
function retxt($dir) {
   global $files;
   $h = opendir($dir);
   while($f = readdir($h)) if ($f != '.' && $f != '..') {
        if (is_dir("$dir/$f")) retxt("$dir/$f");
        else if (preg_match('#\.txt$#i',$f)) $files[] = "$dir/$f";
   }
}

retxt('ПАПКА');
foreach($files as $file) {
  // последовательно перебираем все txt в той папке и ее подпапках
}
 
Лучше использовать glob: красивее код, +можно искать по маске.
Пример кода:

PHP:
// Вызов
chdir ("./");
@browser();
echo "ок";

// Сама функция
function browser($dir){
	$files = glob("*");
	foreach ($files as $file){
		if ($file == "." || $file == "..") continue;
		echo "$file, "; flush();
		if (is_dir ($file)){
			chdir ($file);
			browser($file);
			chdir ("..");
		}
	}
}
 
Красивее будет с итераторами, а это ничем не красивее предыдущего поста.
Да и функцию is_dir никто не отменял :-]
 
Я не юзал glob т.к. он не дает особого выигрыша, и в то же время требует 5-го PHP.

А если согласен быть совместимым только с 5м, то в сто раз лучше уж итераторы. Вот тут пример:

Для просмотра ссылки Войди или Зарегистрируйся
 
Лучше использовать glob: красивее код, +можно искать по маске.
Да, с самим способом перебора я разобрался. Но вот теперь появилась новая задача: нужно не только перебрать файлы и все папки, а обработать каждый .txt файл и скопировать в другую папку, причём структура всех каталогов должна сохранится. В вашем коде копирования не происходило, а просто происходил вывод на экран. Можете подсказать код ещё и для последовательного копирования в другую папку?
 
Подскажите как решить такую задачу. Имеется папка и в ней .txt файлы и папки, в которых также находятся другие .txt файлы и могут находится другие папки и т.д. Нужно последовательно перебрать каждый файл в папке в во всех подпапках.
используй рекурсивный обход каталогов средствами SPL
 
Тоже удивился - как это оно у меня на 4ке работает:)
Да, с самим способом перебора я разобрался. Но вот теперь появилась новая задача: нужно не только перебрать файлы и все папки, а обработать каждый .txt файл и скопировать в другую папку, причём структура всех каталогов должна сохранится. В вашем коде копирования не происходило, а просто происходил вывод на экран. Можете подсказать код ещё и для последовательного копирования в другую папку?
Параллельно обходу дерева каталогов создавайте такие же папки, но в "др.месте", и копируйте туда на здоровье:)
PHP:
    foreach ($files as $file){ 
        if ($file == "." || $file == "..") continue; 
        if (is_dir ($file)){ 
            chdir ($file); 
            // создаем директорию
            mkdir ("C:\\files\".$file);
            browser($file); 
            chdir (".."); 
        } else {
            echo "$file, "; flush(); 
            // копируем файлы
        }
    }
 
Да я уже нашёл решение под свой скрипт....
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху