文件遍历及文件夹的删除

文件遍历有两种方法,一种使用glob函数以数组的形式取到指定目录下的文件;另一种是用opendir与closedir通过打开关闭资源的方法用readdir

函数取到所有文件,但是通过这种方法会取到“.”与“..”两个文件,这两个会返回上级目录,遍历时应跳过这两项。

1.利用glob函数遍历文件,并用filesize()函数取到制定目录下文件的总大小:

 

function ShuLiang($filename)
{
		$attr = glob($filename."/*");    //取到所有文件
		$size = 0;
		
		foreach($attr as $v)
		{
			if(is_dir($v))                     //如果是文件夹,用递归的方法回调。
			{
				$size += ShuLiang($v);
			}
			else
				{
					$size += filesize($v);
				}
		}	
		
		return $size;
}
echo ShuLiang("路径");
?>    

 

  

2.是用opendir与closedir通过打开关闭资源的方法用readdir函数取到所有文件,同样取文件总大小:

 

function Fsize($fname)
{
	$size = 0;
	$dir = opendir($fname);         //打开资源
	
	//遍历目录,找到文件,累加大小
	while($u = readdir($dir))
	{
		if($u!="." && $u!="..")
		{
			$zfname = $fname."/".$u;
			if(is_dir($zfname))
			{
				$size += Fsize($zfname);       //用递归回调
			}
			else
			{
				$size += filesize($zfname);
			}
		}
	}
	
	closedir($dir);     //关闭资源
	return $size;
}

echo Fsize("路径");

 

  

结果正确。

 

 文件夹删除

没有直接删除文件夹的函数,但是有删除文件的函数unlink()与删除空文件夹的函数rmdir(),同样运用递归遍历到所有文件都删除掉,最后删除这个空文件夹:

 

function ShanChu($fname)
{
	//遍历该文件夹,找到所有文件删除
	$dir = opendir($fname);
	while($n = readdir($dir))
	{
		if($n!="." && $n!="..")
		{
			$zname = $fname."/".$n;
			if(is_file($zname))
			{
				unlink($zname);
			}
			else
			{
				ShanChu($zname);
			}
		}
	}
	closedir($dir);

	//删除文件夹
	rmdir($fname);
}

ShanChu("路径");

 

  

 

posted @ 2017-01-15 22:42  发瑞  阅读(1173)  评论(0编辑  收藏  举报