【问题标题】:RecursiveDirectoryIterator to list directoriesRecursiveDirectoryIterator 列出目录
【发布时间】:2023-03-18 01:30:01
【问题描述】:

我想使用 RecursiveDirectoryIterator 递归地列出文件目录。下面是我的代码。

$rii = new RecursiveIteratorIterator(new RecursiveDirectoryIterator(".", RecursiveDirectoryIterator::SKIP_DOTS));

foreach ($rii as $file){
    if ($file->isDir()) {
        echo "D ".$file->getPathName();
    } else {
        echo "F ".$file->getPathName();
    }
    echo "<br>\n";
}

问题是它根本不返回目录。仅列出文件。当我省略 SKIP_DOTS 标志时,我确实得到了目录,但以dir/.dir/.. 的形式,这显然不是我想要的。

现在我当然可以自己去除尾随点,但我想知道是否有更好的内置方法我不知道?

【问题讨论】:

    标签: php


    【解决方案1】:
    $rdi = new RecursiveDirectoryIterator('.', RecursiveDirectoryIterator::KEY_AS_PATHNAME | RecursiveDirectoryIterator::SKIP_DOTS);
    foreach (new RecursiveIteratorIterator($rdi, RecursiveIteratorIterator::SELF_FIRST) as $file => $info) {
        echo $file."\n";
    }
    

    示例文件/目录结构

    .
    |-- a
    |   `-- x
    |       |-- hbye.txt
    |       `-- hello.txt
    |-- b
    |   `-- a
    `-- script.php
    
    4 directories, 3 files
    

    脚本输出:

    ./a
    ./a/x
    ./a/x/hbye.txt
    ./a/x/hello.txt
    ./script.php
    ./b
    ./b/a
    

    【讨论】:

      猜你喜欢
      • 2015-11-24
      • 1970-01-01
      • 2011-02-25
      • 2013-07-26
      • 1970-01-01
      • 2013-01-02
      • 2011-05-31
      • 1970-01-01
      • 2016-06-11
      相关资源
      最近更新 更多