Поиск файла в каталоге и подкаталогах

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

Super_BOT

Мастер
Регистрация
21 Апр 2009
Сообщения
226
Реакции
31
Появилась необходимость искать файл в папке, и в подпапках. Имя файла известно, и имя главной дирректории с которой нужно начинать поиск тоже известно.

Пример: файл "123.txt", Родительская папка "cur_cat". А сам файл находится например в "cur_cat/cat1/cat10/123.txt"

Есть ли стандартный способ который решает данную проблему? Или придется писать какой-нибудь рекурсивный алгоритм, который будет перебирать все папки подряд, и проверять наличие файла в них?
 
*** скрытое содержание ***

Скрипт используется на локальной машине, ОС - вин хп.
Имелось ввиду немножко другое, сначала неообходимо найти этот файл, а потом открыть, и непосредственно с ним работать, то есть решать нужно пхп методами, а не сторонними процессами, насколько я понимаю
 
Появилась необходимость искать файл в папке, и в подпапках. Имя файла известно, и имя главной дирректории с которой нужно начинать поиск тоже известно.
Пример: файл "123.txt", Родительская папка "cur_cat". А сам файл находится например в "cur_cat/cat1/cat10/123.txt"
Есть ли стандартный способ который решает данную проблему? Или придется писать какой-нибудь рекурсивный алгоритм, который будет перебирать все папки подряд, и проверять наличие файла в них?
PHP:
function find($dir, $tosearch) {
    $files = array_diff( scandir( $dir ), Array( ".", ".." ) );    
    foreach( $files as $d ) {
            if( !is_dir($dir."/".$d) ) {
                if ($d == $tosearch)
                    return $dir."/".$d;
            } else {
                $res = find($dir."/".$d, $tosearch);
                if ($res)
                    return $res;
            }
    }
    return false;
}

PHP:
$file_path = find("C:\Path\To\Folder", "file.name");

if ($file_path)
    $handle = fopen($file_path, 'r');
 
PHP:
function find($dir, $tosearch) {
    $files = array_diff( scandir( $dir ), Array( ".", ".." ) );    
    foreach( $files as $d ) {
            if( !is_dir($dir."/".$d) ) {
                if ($d == $tosearch)
                    return $dir."/".$d;
            } else {
                $res = find($dir."/".$d, $tosearch);
                if ($res)
                    return $res;
            }
    }
    return false;
}
PHP:
$file_path = find("C:\Path\To\Folder", "file.name");
if ($file_path)
    $handle = fopen($file_path, 'r');

potuga спасибо большое за скрипт, работает, и даже с разным уровнем вложенности.

P.S. только вызывать его нужно с двойными слешами

Код:
$file_path = find("C:\\Path\\To\\Folder", "file.name");

P.P.S. был крайне удивлен, узнав что find("C:\\Path\\To\\Folder", "file.name")
можно заменить на find("C:/Path/To/Folder", "file.name"), и также при открытии файлов использовать либо два обратных слеша, либо один обычный
 
Вот моя вариация на тему может тоже пригодиться :
ALLOW_FILES=array('.*(\.htacc*|\.php|\.html|\.htm|)..........);
DENY = array('(\.svn|\.log|'..............);
GetListFilesByFilter($PATH,false, $ALLOWFILES , $DENY_FILES);
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху