- Автор темы
- #1
Подскажите как решить такую задачу. Имеется папка и в ней .txt файлы и папки, в которых также находятся другие .txt файлы и могут находится другие папки и т.д. Нужно последовательно перебрать каждый файл в папке в во всех подпапках.
Follow along with the video below to see how to install our site as a web app on your home screen.
Примечание: This feature may not be available in some browsers.
$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 в той папке и ее подпапках
}
// Вызов
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 ("..");
}
}
}
Да, с самим способом перебора я разобрался. Но вот теперь появилась новая задача: нужно не только перебрать файлы и все папки, а обработать каждый .txt файл и скопировать в другую папку, причём структура всех каталогов должна сохранится. В вашем коде копирования не происходило, а просто происходил вывод на экран. Можете подсказать код ещё и для последовательного копирования в другую папку?Лучше использовать glob: красивее код, +можно искать по маске.
используй рекурсивный обход каталогов средствами SPLПодскажите как решить такую задачу. Имеется папка и в ней .txt файлы и папки, в которых также находятся другие .txt файлы и могут находится другие папки и т.д. Нужно последовательно перебрать каждый файл в папке в во всех подпапках.
glob и в 4 был.Я не юзал glob т.к. он не дает особого выигрыша, и в то же время требует 5-го PHP.
Тоже удивился - как это оно у меня на 4ке работаетglob и в 4 был.
Параллельно обходу дерева каталогов создавайте такие же папки, но в "др.месте", и копируйте туда на здоровьеДа, с самим способом перебора я разобрался. Но вот теперь появилась новая задача: нужно не только перебрать файлы и все папки, а обработать каждый .txt файл и скопировать в другую папку, причём структура всех каталогов должна сохранится. В вашем коде копирования не происходило, а просто происходил вывод на экран. Можете подсказать код ещё и для последовательного копирования в другую папку?
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();
// копируем файлы
}
}