RecursiveDirectoryIterator目录操作类
/**
* @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目录操作类的更多相关文章
- c# 文件及目录操作类
18位长度的计时周期数: DateTime.Now.Ticks.ToString() 多数是收集而来,加上测试感觉很不错,分享一下或许有些帮助吧: 引用: using System; using Sy ...
- 【C#公共帮助类】FTPClientHelper帮助类,实现文件上传,目录操作,下载等动作
关于本文档的说明 本文档使用Socket通信方式来实现ftp文件的上传下载等命令的执行 欢迎传播分享,必须保持原作者的信息,但禁止将该文档直接用于商业盈利. 本人自从几年前走上编程之路,一直致力于收集 ...
- [FTP] FTPClient--FTP操作帮助类,上传下载,文件,目录操作 (转载)
点击下载 FTPClient.zip 这个类是关于FTP客户端的操作1.构造函数 2.字段 服务器账户密码3.属性4.链接5.传输模式6.文件操作7.上传和下载8.目录操作9.内容函数看下面代码吧 / ...
- C# FTPClient--FTP操作帮助类,上传下载,文件,目录操作
FROM :http://www.sufeinet.com/forum.php?mod=viewthread&tid=1736&extra=page%3D1%26filter%3Dty ...
- C# FTPClientHelper共公类 实现文件上传,目录操作,下载等动作
文档说明 本文档使用Socket通信方式来实现ftp文件的上传下载等命令的执行 1.基本介绍 由于最近的项目是客户端的程序,需要将客户端的图片文件[切图]-[打包]-[ftp上传],现在就差最后一步了 ...
- Util应用程序框架公共操作类(九):Lambda表达式扩展
上一篇对Lambda表达式公共操作类进行了一些增强,本篇使用扩展方法对Lambda表达式进行扩展. 修改Util项目的Extensions.Expression.cs文件,代码如下. using Sy ...
- FlexPaper+SWFTool+操作类=在线预览PDF
引言 由于客户有在线预览PDF格式的需求,在网上找了一下解决方案,觉得FlexPaper用起来还是挺方便的,flexpaper是将pdf转换为swf格式的文件预览的,所以flexpaper一般和swf ...
- C# 字符串操作类
using System; using System.Collections.Generic; using System.Text; using System.Collections; using S ...
- PHP FTP操作类( 上传、拷贝、移动、删除文件/创建目录 )
/** * 作用:FTP操作类( 拷贝.移动.删除文件/创建目录 ) * 时间:2006/5/9 * 作者:欣然随风 * QQ:276624915 */ class class_ftp { publi ...
随机推荐
- Android 字体颜色在一些机型上不适配(textcolor失效)
最近在参加一个创业项目的开发,其中在适配Android4.4版本时候遇到一个问题,本身title是白色字体,并且标签栏里面的字是绿色的,但是到了4.4手机上就变成了黑色. 也就是说textcolor并 ...
- iaas,paas,saas理解
IaaS.PaaS.SaaS多次看到这几个单词,今天仔细看看来, 这几个词和云计算相关:1,iaaS,Hardware-as-a-Service,信息,硬件服务,服务器,存储和网络硬件,网络存储,带 ...
- Yii2高级版本复制新项目出现问题解决(转)
引用于 http://www.linuxidc.com/Linux/2015-02/114116.htm Yii2高级版本复制新项目会遇到下面的报错信息: exception 'yii\base\In ...
- sqlserver和oracle中对全半角的转换
oracle中对全半角的转换 to_single_byte(c)转换成半角 to_multi_byte(c)转换成全角 SELECT To_single_byte('881898?71') FROM ...
- 查锁表及kill
当一个表一直被锁住而无法进行操作的时候,可以用如下方法 select l.session_id sid, s.serial#, l.locked_mode 锁模式, l.oracle_username ...
- 用bat使用date和time命令
D:\>date /T 2010-12-10 星期五 D:\>echo %date:~0,10% 2010-12-10 date:命令(别忘记date后面有个冒号) ~0:从索引0开始取内 ...
- 跟我一起学习VIM - The Life Changing Editor
前两天同事让我在小组内部分享一下VIM,于是我花了一点时间写了个简短的教程.虽然准备有限,但分享过程中大家大多带着一种惊叹的表情,原来编辑器可以这样强大,这算是对我多年来使用VIM的最大鼓舞吧.所以分 ...
- CSS3 垂直树状图——运用 :before 和 :after
直接上图(原网址),还有步骤想详解视频.自己CSS3练习demo. [demo] [HTML] <div class="tree"> <ul> <li ...
- memcached缓存机制+微软缓存机制使用详解
1. why Memcached 1.1 一台web服务器上,iis接收的请求数是有限的,当访问量超大的时候,网站访问就会遇到瓶颈了,处理方式就是运用多了服务器把请求数分流(集群),对外公布的就一 ...
- windows编程socket问题
今天调试了个MFC网络程序,被bug困扰了一天,终于在收工前解决了. 大致是这样的,我们需要用上位机远程控制机器车前行.上位机上的MFC app的键盘按键响应如下:当按键按下时,系统会发送一个消息给a ...