duanchuonong5370 2016-12-06 09:17
浏览 31
已采纳

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

I want my script to put around all the files in a folder, but not around folders in the folder, this is the code I have atm:

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>";
}

I want an output like this:

<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>

Thanks in advance

  • 写回答

1条回答 默认 最新

  • doulu5717 2016-12-06 10:46
    关注

    Try the following. It's just one possible solution, but you will also get all folders at the beginning:

    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>";
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?