/**
* @author Funsion Wu
* @abstract SPL使用案例,全国首发,技术分享,欢迎转帖
*/
class Dir extends RecursiveDirectoryIterator {
const CHILD_FIRST = RecursiveIteratorIterator::CHILD_FIRST ;
const LEAVES_ONLY = RecursiveIteratorIterator::LEAVES_ONLY ;
const SELF_FIRST = RecursiveIteratorIterator::SELF_FIRST ;
/* ideas:将Dir类设置为不变类,无状态类 */
private static function getDirIterator( $dir, $mode=self::LEAVES_ONLY ) {
if( !file_exists($dir) ){ exit ; }
$dirIterator = new RecursiveDirectoryIterator($dir);
$objIterator = new RecursiveIteratorIterator( $dirIterator, $mode );
return $objIterator;
}
/**
* 递归的删除目录
+ ----------------------------------------------------- +
* @param $dir 要删除的目录
* @param $delSelf 决定删除目录or清空目录,默认删除目录
*/
public static function delDir( $dir, $delSelf=true ) {
$dirIterator = self::getDirIterator($dir, self::CHILD_FIRST);
foreach ( $dirIterator as $file ) {
if ( $file->isDir() ) {
@ rmdir( $file->getRealPath() );
}else{
@ unlink( $file->getRealPath() );
}
}
if( $delSelf ) { @ rmdir($dir); }
}
/**
* 递归的列出目录,遍历目录
+ -------------------------- +
* @param $dir 要操作的目录
*/
public static function listDir ( $dir ) {
$dirIterator = self::getDirIterator( $dir, self::SELF_FIRST );
foreach ( $dirIterator as $file ) {
$filepath = str_replace('\\' , '/' , $file->getPath() );
$deep = substr_count( $filepath , '/' );
if( $file->isDir() ) {
$str .= '<div style="color:blue;margin-left:'. 35*$deep .'px"> + ' ;
$str .= $file->getBasename() .'</div>' ;
}elseif( $file->isFile() ){
$str .= '<div style="margin-left:'. 35*$deep .'px">' . $file->getBasename() .'</div>';
}
}
return $str ;
}
/**
* 统计目录的信息(总字节数,文件数,目录数)
+ -----------------------------=----------- +
* @param $dir 要操作的目录
* @return 由目录信息组成的数组
*/
public static function countDir( $dir ) {
$countDir = $countFiles = $size = 0 ;
$dirIterator = self::getDirIterator( $dir, self::SELF_FIRST );
foreach ( $dirIterator as $file ) {
if( $file->isDir() ) {
$countDir++ ;
}elseif( $file->isFile() ){
$countFiles++ ;
$size += $file->getSize() ;
}
}
return array( 'countDir'=>$countDir, 'countFiles'=>$countFiles, 'size'=>$size.' Byte' );
}
/**
* 递归的创建目录
+ -------------------- +
* @param $dir 要创建的目录
* @param $mode 所创建目录的读写权限
*/
public static function makeDir( $dir, $mode=0644 ) {
return mkdir( $dir, $mode, true );
}
} /* ========================== 调用方法 =========================== */ // Dir::delDir('./need_del_dir');
// echo Dir::listDir('tools');
// var_dump( Dir::countDir('tools') );
// Dir::makeDir( 'aaa/ccc/ddd/eee/fff' );

RecursiveDirectoryIterator目录操作类的更多相关文章

  1. c# 文件及目录操作类

    18位长度的计时周期数: DateTime.Now.Ticks.ToString() 多数是收集而来,加上测试感觉很不错,分享一下或许有些帮助吧: 引用: using System; using Sy ...

  2. 【C#公共帮助类】FTPClientHelper帮助类,实现文件上传,目录操作,下载等动作

    关于本文档的说明 本文档使用Socket通信方式来实现ftp文件的上传下载等命令的执行 欢迎传播分享,必须保持原作者的信息,但禁止将该文档直接用于商业盈利. 本人自从几年前走上编程之路,一直致力于收集 ...

  3. [FTP] FTPClient--FTP操作帮助类,上传下载,文件,目录操作 (转载)

    点击下载 FTPClient.zip 这个类是关于FTP客户端的操作1.构造函数 2.字段 服务器账户密码3.属性4.链接5.传输模式6.文件操作7.上传和下载8.目录操作9.内容函数看下面代码吧 / ...

  4. C# FTPClient--FTP操作帮助类,上传下载,文件,目录操作

    FROM :http://www.sufeinet.com/forum.php?mod=viewthread&tid=1736&extra=page%3D1%26filter%3Dty ...

  5. C# FTPClientHelper共公类 实现文件上传,目录操作,下载等动作

    文档说明 本文档使用Socket通信方式来实现ftp文件的上传下载等命令的执行 1.基本介绍 由于最近的项目是客户端的程序,需要将客户端的图片文件[切图]-[打包]-[ftp上传],现在就差最后一步了 ...

  6. Util应用程序框架公共操作类(九):Lambda表达式扩展

    上一篇对Lambda表达式公共操作类进行了一些增强,本篇使用扩展方法对Lambda表达式进行扩展. 修改Util项目的Extensions.Expression.cs文件,代码如下. using Sy ...

  7. FlexPaper+SWFTool+操作类=在线预览PDF

    引言 由于客户有在线预览PDF格式的需求,在网上找了一下解决方案,觉得FlexPaper用起来还是挺方便的,flexpaper是将pdf转换为swf格式的文件预览的,所以flexpaper一般和swf ...

  8. C# 字符串操作类

    using System; using System.Collections.Generic; using System.Text; using System.Collections; using S ...

  9. PHP FTP操作类( 上传、拷贝、移动、删除文件/创建目录 )

    /** * 作用:FTP操作类( 拷贝.移动.删除文件/创建目录 ) * 时间:2006/5/9 * 作者:欣然随风 * QQ:276624915 */ class class_ftp { publi ...

随机推荐

  1. Android客户端token简介和简单应用

    一.什么是Token Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数 ...

  2. 蓝牙 CoreBluetooth

    baseK(相关基础知识)蓝牙常见名称和缩写 BLE:(Bluetooth low energy)蓝牙4.0设备因为低耗电,也叫BLEperipheral,central:外设和中心设备,发起链接的是 ...

  3. WebStorm 8.0安装LESS编译环境的教程

    WebStorm是一个非常棒的Web前端开发编辑器,被程序猿们成为“最智能的JavaScript IDE”.对HTML5.Bootstrap框架.Node.js等都有完美支持.目前最新版本为WebSt ...

  4. TCP/IP——内外网IP+子网掩码作用+PING(网络总结)

    目录: 1.如何区分内网IP和外网IP? 保留字段 2.子网掩码是起什么作用的? 将DNS和IP异或,表示哪段起作用 3.ping到底起什么作用? ping本地.ping远程 下面针对上面三个问题分别 ...

  5. Eclipse Code Templates设置

    从工作开始,经历了几个项目的开发,现在的项目一般都是一个团队共同开发,而每个人都有自己的编码习惯,为了统一格式,项目组在项目开发之前都会制定一系列的规范.俗话说约定优于配置,但是在执行过程中往往发现效 ...

  6. 第七篇、使用UIView的animateWithDuration方法制作简易动画

    import UIKit class LolitaCircleButton: UIButton { private var color: UIColor private var imageURL: S ...

  7. Mac OSX用终端检测文件的sha1值

    打开终端,输入shasum空格然后把文件拖进来回车即可;

  8. 逻辑推理:在一个100条语句的列表中,第n条语句是“在这个列表中,恰有n条语句为假”,可以得出什么结论?

    <离散数学及其应用>第六版1.1练习题第43题的个人分析 题目:在一个100条语句的列表中,第n条语句是"在这个列表中,恰有n条语句为假"..........      ...

  9. OC5_类别

    // // NSString+Reverse.h // OC5_类别 // // Created by zhangxueming on 15/6/16. // Copyright (c) 2015年 ...

  10. CSS Sprites优点

    在分析各个网站的CSS时,我们经常可以看到一些网站有很多的元素共享了一张背景图片,而这张背景图片包含了所有这些元素需要的背景,这种技术就叫做CSS Sprites. 例如淘宝的css sprites ...