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

报告相同问题?

悬赏问题

  • ¥15 如何绘制动力学系统的相图
  • ¥15 对接wps接口实现获取元数据
  • ¥20 给自己本科IT专业毕业的妹m找个实习工作
  • ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?
  • ¥30 我的代码按理说完成了模型的搭建、训练、验证测试等工作(标签-网络|关键词-变化检测)
  • ¥50 mac mini外接显示器 画质字体模糊
  • ¥15 TLS1.2协议通信解密
  • ¥40 图书信息管理系统程序编写
  • ¥20 Qcustomplot缩小曲线形状问题
  • ¥15 企业资源规划ERP沙盘模拟