递归遍历和删除目录
在踩过递归删除文件夹的坑(删了好多东西啊!!!)之后,本人总结了一下采用递归遍历目录和递归删除目录。
“坑”的来历:在遍历目录时,里面会有 ‘.’ 和 ‘..’ 两个目录, 分别指向上一级和再上一级的目录,这两个不能删除, 是指针, 在windows下看不见, 删除文件时, 必须过滤掉这两个, 否则向上找文件删除会删除所有文件 。我就是踩了这个坑,差点毁掉电脑上的文件,因此果断记下来,提醒自己和大家不要忘记这两个目录。
递归遍历目录
直接上代码比较好
function recursive($dirname){
// 打开目录,返回句柄
$handle = opendir($dirname);
// 循环读取条目
echo "<ul>";
while($line = readdir($handle)){
// 如果是‘.’或者'..',则继续
if($line == '.' || $line == '..')
continue;
echo "<li>" . iconv("gbk","utf-8",$line) . "</li>";
// 如果是目录,则递归调用
if(is_dir($dirname ."/". $line)){
recursive($dirname ."/". $line);
}
}
echo "</ul>";
// 关闭目录
closedir($handle);
}
递归删除目录
function delAll($dirname)
{
// 打开目录
$handle = opendir($dirname);
// 循环读取目录中的所有条目
while ($line = readdir($handle)) {
if($line == '.' || $line == '..') continue;
// 判断当前文件是否是目录
if(is_dir($dirname . "/" . $line)){
delAll($dirname . "/" . $line);
}else{
// 如果是文件,使用unlink文件删除
unlink($dirname . "/" . $line);
}
}
// 关闭目录
closedir($handle);
// 删除目录,关闭目录才可以删除目录
rmdir($dirname);
}