【问题标题】:Using RecursiveIteratorIterator to list files in folder is great. Can I get the parent path and full path as well?使用 RecursiveIteratorIterator 列出文件夹中的文件非常棒。我也可以获得父路径和完整路径吗?
【发布时间】:2013-03-06 07:56:18
【问题描述】:

我需要列出文件夹及其子文件夹中的所有文件(具有某些扩展名)。我使用了 RecursiveIteratorIterator,如 @Matthew 在 PHP list all files in directory 中的出色回答中所述。

  • 我将搜索的根设置为“..”,所有文件名的前缀为“../”。如何只获取文件名?
  • 除了文件名之外,我如何获取其父文件夹名称?
  • ...如何获取文件名的完整路径?

最后一件事:显示文件树,或者可能所有没有子目录的目录,都是处理文件时可能想要做的事情的例子。您建议如何将此数据传递到客户端以及数据结构是什么样的?

【问题讨论】:

    标签: php file spl


    【解决方案1】:

    以此为基础:

    $iter = new RecursiveDirectoryIterator('../');
    
    foreach (new RecursiveIteratorIterator($iter) as $fileName => $fileInfo) {
       $fullPath = (string) $fileInfo;
    }
    

    每个$fileInfo 都会返回一个SplFileInfo 对象。除了许多其他方法之外,还可以轻松访问路径和文件名。

    phpSplFileInfo Object
    (
      [pathName:SplFileInfo:private] => ./t.php
      [fileName:SplFileInfo:private] => t.php
    )
    

    我可能弄错了,但要访问父文件夹名称,除非您通过树记录它,最简单的方法是使用 dirname 并将 ../ 附加到路径。

    【讨论】:

    • Martin,你想捕捉什么样的异常?文档中没有提到 __toString() 中的异常。
    • 糟糕,我从一个打开的文件中粘贴了它,该文件利用了抛出异常的函数,忘记删除它。修复!
    • @Martin:转换为字符串而不是使用->__toString()。这就是该函数的意图并且它不会泄漏任何异常。 (您可能出于调试原因这样做了,但对于此处的代码,请使用直接变体)。
    • 另外,我认为您想概述该对象还提供了相对于递归目录迭代器的基本路径的路径。你可能想让这个更明显/显示一个小演示。只是评论。
    【解决方案2】:

    $filename 在那个答案中实际上不是一个字符串。它是SplFileInfo 类型的对象,可以像字符串一样使用,但它也提供了更详细的信息:

    【讨论】:

    • 谢谢,效果很好。但是父目录呢? @sectus
    • @user1639431, $file_info->getPathInfo() 应该返回父目录的 SplFileInfo 对象。
    【解决方案3】:
    <?php
        $iterator = new FilesystemIterator(dirname(__FILE__), FilesystemIterator::CURRENT_AS_PATHNAME);
        foreach ($iterator as $fileinfo) {
            echo $iterator->current()->getPathname() . "\n";
        }
     ?>
    

    【讨论】:

      猜你喜欢
      • 2016-03-25
      • 2011-01-10
      • 2015-06-15
      • 1970-01-01
      • 2022-12-21
      • 2011-07-10
      • 2011-07-31
      • 2011-07-27
      • 2019-10-21
      相关资源
      最近更新 更多