文件夹扫描脚本,希望用<files> </files>包围所有文件但不包含文件夹

时间:2016-12-06 09:17:26

标签: php xml

我希望我的脚本能够放置文件夹中的所有文件,但不能放在文件夹中的文件夹周围,这是我的代码:

function listFolderFiles($dir){
$folder = scandir($dir);
echo "<folder name='".$dir."'>";
foreach($folder as $file){
    if($file != '.' && $file != '..'){
        if(is_dir($dir.'/'.$file)) {            
            listFolderFiles($dir.'/'.$file);        
        }
        else{
         echo '<file>'.$file.'</file>';
        }  
    }   
}
echo "</folder>";
}

我想要这样的输出:

<folder name='appdata'>
    <folder name='appdata/assets'>
        <files>
            <file>New Text Document - Copy (2) - Copy.txt</file>
            <file>New Text Document - Copy (2).txt</file>
            <file>New Text Document - Copy.txt</file>
            <file>New Text Document.txt</file>
        </files>
        <folder name='appdata/assets/audio'>
            <folder name='appdata/assets/audio/frl'>
                <files>
                    <file>New Microsoft Excel Worksheet - Copy (2).xlsx</file>
                    <file>New Microsoft Excel Worksheet - Copy - Copy.xlsx</file>
                    <file>New Microsoft Excel Worksheet - Copy.xlsx</file>
                    <file>New Microsoft Excel Worksheet.xlsx</file>
                </files>
            </folder>
        </folder>
    </folder>
</folder>

提前致谢

1 个答案:

答案 0 :(得分:0)

尝试以下方法。它只是一种可能的解决方案,但您也可以在开头获取所有文件夹:

function listFolderFiles($dir){
   $folder = scandir($dir);
   echo "<folder name='".$dir."'>";
   $files = array();
   foreach($folder as $file){
       if($file != '.' && $file != '..'){
           if(is_dir($dir.'/'.$file)) {            
               listFolderFiles($dir.'/'.$file);        
           }
        else{
            $files[] = $file;
        }  
    }
    if (!empty($files)) {
       echo "<files>";
       foreach ($files as $_file) {
           echo '<file>'.$_file.'</file>';
       }
       echo "</files>";
    }   
}
   echo "</folder>";
}