2012-06-16 6 views
2

Я пытаюсь перечислить файлы в подкаталогах и записать эти списки в отдельные текстовые файлы.php записывает содержимое поддиректорий в отдельные текстовые файлы

Мне удалось получить список каталогов и подкаталогов и даже записать все файлы в текстовый файл.

Мне просто не удается вырваться из циклов, которые я создаю. Я либо заканчиваю одним текстовым файлом, либо второй + файл включает все предыдущие содержимое подкаталогов.

Что мне нужно достичь, это:

  • реж A/AA/a1.txt, a2.txt >> AA.log
  • реж A/BB/b1.txt, b2.txt> > BB.log
  • т.д.

Надеется, что это имеет смысл.

Я нашел метод recursiveDirectoryIterator, как описано в PHP SPL RecursiveDirectoryIterator RecursiveIteratorIterator retrieving the full tree, что очень помогает. Затем я использую цикл for и foreach для итерации по каталогам, для записи текстовых файлов, но я не могу разбить их на несколько файлов.

+1

-1. нет php-кода. –

+0

Я не совсем понимаю, в чем проблема. Я бы сказал, что такие проблемы можно решить, однако описание, которое вы даете, оставляет слишком много комнат для переменных, поэтому я думаю, что вы должны улучшить свой вопрос. – hakre

+0

Укажите исходный код, с которым вы столкнулись. –

ответ

2

Скорее всего, вы не отфильтровываете каталоги . и ...

$maindir=opendir('A'); 
if (!$maindir) die('Cant open directory A'); 
while (true) { 
    $dir=readdir($maindir); 
    if (!$dir) break; 
    if ($dir=='.') continue; 
    if ($dir=='..') continue; 
    if (!is_dir("A/$dir")) continue; 
    $subdir=opendir("A/$dir"); 
    if (!$subdir) continue; 
    $fd=fopen("$dir.log",'wb'); 
    if (!$fd) continue; 
    while (true) { 
    $file=readdir($subdir); 
    if (!$file) break; 
    if (!is_file($file)) continue; 
    fwrite($fd,file_get_contents("A/$dir/$file"); 
    } 
    fclose($fd); 
} 
+0

Спасибо за ваши ответы! Я буду работать над этим, и погода решена или нет, я верну исходный код. Единственная причина, по которой я не был раньше, потому что я пробовал многообразные подходы и всегда терпел неудачу. Первое, что я вижу из вышеизложенного, это то, что мое мышление, вероятно, было неправильным, и я, возможно, использовал неправильные типы циклов. назад скоро и спасибо снова !! – datafunk

1

Я думал, что продемонстрировать другой способ, как это кажется, как хорошее место, чтобы использовать glob.

// Where to start recursing, no trailing slash 
$start_folder = './test'; 
// Where to output files 
$output_folder = $start_folder; 

chdir($start_folder); 

function glob_each_dir ($start_folder, $callback) { 

    $search_pattern = $start_folder . DIRECTORY_SEPARATOR . '*'; 

    // Get just the folders in an array 
    $folders = glob($search_pattern, GLOB_ONLYDIR); 

    // Get just the files: there isn't an ONLYFILES option yet so just diff the 
    // entire folder contents against the previous array of folders 
    $files = array_diff(glob($search_pattern), $folders); 

    // Apply the callback function to the array of files 
    $callback($start_folder, $files); 

    if (!empty($folders)) { 
     // Call this function for every folder found 
     foreach ($folders as $folder) { 
      glob_each_dir($folder, $callback); 
     } 
    } 
} 

glob_each_dir('.', function ($folder_name, Array $filelist) { 
     // Generate a filename from the folder, changing/or \ into _ 
     $output_filename = $_GLOBALS['output_folder'] 
      . trim(strtr(str_replace(__DIR__, '', realpath($folder_name)), DIRECTORY_SEPARATOR, '_'), '_') 
      . '.txt'; 
     file_put_contents($output_filename, implode(PHP_EOL, $filelist)); 
    }); 
+0

Привет, ребята, еще раз, чтобы поблагодарить вас - я должен отчитаться (думаю), но это домашний проект, и работа на самом деле обогнала жизнь на прошлой неделе, и я еще не прибил ее, но вернемся к ней как можно скорее! Спасибо за вашу помощь снова! – datafunk

Смежные вопросы