当文件夹为空时,DirectoryIterator仍显示3个文件

时间:2013-07-27 20:56:28

标签: php

我有以下代码来计算使用php

的文件夹中的文件数
$x=0;
$filepath=$uplaod_drive."Workspace/12345";
$dir = new DirectoryIterator($filepath);
foreach($dir as $file ){
  $x++;
}

但即使该文件夹为空,它也会显示3个文件,如果该文件夹有8个文件则显示11个文件。

如果有人能解释一下,我会非常感激。谢谢。

2 个答案:

答案 0 :(得分:1)

如果您只想计算常规文件:

$x=0;
$filepath=$uplaod_drive."Workspace/12345";
$dir = new DirectoryIterator($filepath);
foreach($dir as $file ){
  if ($file->isFile()) $x++; 
}

或者如果您想跳过目录:

$x=0;
$filepath=$uplaod_drive."Workspace/12345";
$dir = new DirectoryIterator($filepath);
foreach($dir as $file ){
  if (!$file->isDir()) $x++; 
}

或者如果你想跳过点文件:

$x=0;
$filepath=$uplaod_drive."Workspace/12345";
$dir = new DirectoryIterator($filepath);
foreach($dir as $file ){
  if (!$file->isDot()) $x++; 
}

答案 1 :(得分:0)

DirectoryIterator将当前目录(用'。'表示)和前一个目录(用'..'表示)计为$ files。像这样调试你的代码。

$x=0;
$filepath='C:\xampp\htdocs\\';
$dir = new DirectoryIterator($filepath);
foreach($dir as $file ){
    echo $file . "<br/>";
  $x++;
}
echo $x;

然后正如@Prix上面的评论中提到的那样,你可以跳过$ file-&gt; isDot(),如果你不想计算目录,那么如果不是$ file-&gt; isFile()也会跳过。< / p>

$x=0;
$filepath='C:\xampp\htdocs\\';
$dir = new DirectoryIterator($filepath);
foreach($dir as $file ){
    if ($file->isDot() || !$file->isFile()) continue;
    //echo $file . "<br/>";
  $x++;
}
echo $x;