递归操作文件

递归复制文件

/**

  • 问题: copy()函数只能复制文件 不能复制文件夹
  • 那文件夹如何处理: 只能通过mkdir来创建
    */

//如果$src是目录 is_dir
//则创建对应的 d s t 目 录 , m k d i r / / 遍 历 dst 目录, mkdir //遍历 dst,mkdir//src目录
//假设$src是 www $dst是 www_copy
//遍历出来的name是06_File,那么这个文件的路径是
//www/06_File 和 www_copy/06_File
//所以要拼接处两个路径, 分别是原路径 和 目标路径
//把这个新的内容粘贴过去, 此时又要区分是文件还是文件夹… 此时就要进行 递归操作了!

			//参数1: $src 是原文件夹路径
			//参数2: $dst 是目标文件夹路径

			function copyDir($src, $dst)
						{
	     if (is_dir($src)) {
    //文件夹不能复制, 只能创建
    mkdir($dst);
    //遍历文件夹下的所有内容, 都复制过去
    $handle = opendir($src);
    while (($name = readdir($handle)) !== false) {
        if ($name != '.' && $name != '..') {
            //获取遍历出来的子文件的实际路径
            $newSrc = $src . '/' . $name;
            $newDst = $dst . '/' . $name;
            //新拼接出来的路径 可能是文件 也可能是文件夹
            //此过程恰好就是当前函数在做的事情
            copyDir($newSrc, $newDst);
        }
    }
    closedir($handle);
	 }

	 //如果$src是文件 is_file	 //就用copy方法 复制过去即可
	if (is_file($src)) {
	    copy($src, $dst);
	  }
	}

	copyDir('D:/www', 'D:/www_copy');

//就会在D盘下出现 www_copy文件夹, 其中内容与www文件夹一样

**

// 递归删除: 慎用,不进垃圾回收站

//rmdir(); 只能删除空的目录
rmdir(‘D:/www_copy’);

function removeDir($path)
{
//路径是文件夹
//要先遍历删除文件夹下的所有内容, 然后再删除文件夹
if (is_dir($path)) {
    $handle = opendir($path);
    while (($name = readdir($handle)) !== false) {
        if ($name != '.' && $name != '..') {
            $p = $path . '/' . $name;
            //拼接的新路径$p 有可能是文件 也可能是文件夹, 这个删除处理操作恰好就是当前函数在做的事情
            removeDir($p);
        }
    }
    closedir($handle);
    
    rmdir($path);
}

//路径是文件  unlink()
if (is_file($path)) {
    unlink($path);
}
}

	removeDir('D:/www_copy/');

利用递归的方式读取某个目录下方的所有子目录信息

//readDir(); 只能读取当前目录的一级内容

	function readAllDir($path)
{
//如果$path是 目录的话那么就查看目录下方的所有内容 is_dir()

//循环遍历时, 通过拼接循环得到的文件名到 路径上
//$path . '/' . $name
//得到循环出来的文件的实际路径, 然后再次判断这个路径是文件还是文件夹, 是文件就打印出这个路径, 是文件夹, 就再次遍历文件夹.....
if (is_dir($path)) {
    $handle = opendir($path);
    while (($name = readdir($handle)) !== false) {
        if ($name != '.' && $name != '..') {
            //$name是文件夹/文件的名字
            $p = $path . '/' . $name;
            //再次判断$p这个新路径是文件还是文件夹
            readAllDir($p);
        }

    }
    closedir($handle);
}

//如果$path是 文件的话,那么就打印出来  is_file()
if (is_file($path)) {
    echo $path, '<br>';
}
}

header('content-type:text/html;charset=gbk');
//期望: 打印出所有的子文件路径
readAllDir('D:/www');

文件大小的读取

//单位是 字节
// echo filesize(‘C:/Sublime_0703.rar’);

/**

  • 计算机大小单位:

  • bit 位 代表1个开关, 0 或 1

  • Byte 字节 1Byte = 8bit 可以代表256个数字

  • kB 千字节 1kB = 1024Byte 1024 = 2^10

  • MB 兆 1MB = 1024KB

  • GB 1GB = 1024MB

  • TB 1TB = 1024G

  • PB 1PB = 1024TB

     function toSize($path)
     	 {
    $bytes = filesize($path); //读取大小, 单位是byte
       $n = 0;
      while ($bytes >= 1024) {
     $bytes /= 1024;
     //$n 记录进位的次数, 每次除以1024就代表进一位
     $n++;
       }
    $units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
     return round($bytes, 2) . $units[$n];
     	}
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值