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 ...
随机推荐
- 探讨PHP页面跳转几种实现技巧
PHP被许多程序员用来开发WEB的首选语言.在实际开发中,网站的各项功能都可以通过PHP语言的编写来满足,比如PHP页面跳转这一方法. 探讨PHP变量解析顺序如何获取提交数据 深入解读PHP运行机制 ...
- jboss部署出现jboss.naming.context.java.rmi找不到错误
最近,在机器人程序中使用jmx,准备做个远程调用,客户端是web,部署在jboss上,本地测试的都好好的,发到预发布上就是不行, 错误描述: Failed to retrieve RMIServer ...
- 逆向+两次bfs(UVA 1599)
为什么都说简单好想咧.坦白从宽看了人家的代码,涨了好多姿势,, http://blog.csdn.net/u013382399/article/details/38227917 被一个细节坑了.. 2 ...
- C#基础性问题
解决方案.项目.类之间的关系: 一个解决方案可以包含多个项目.一个项目可以包含多个类 解决方案:公司 项目:部门 类:员工 .sln:解决方案文件,里面包含着整个解决方案的信息,可以双击运行. .cs ...
- 新增html元素的使用
今天学习HTML5中新增元素的使用 (Ⅰ)新增主体结构元素 Section元素:用于对网站或应用程序中的内容进行分块. <section> <h1></h1> &l ...
- 模板引擎逻辑语句处理之对单层for循环的处理
先上代码 private function moldforExt(){//模板单层For循环处理 $SQL=$this->sql_obj; $URL=$this->url_obj; req ...
- java之enum枚举(2015年05月28日)
背景: 今天启动了一个新的项目,由于要从之前的旧项目中拿过来一些代码,所以就看了下公司之前项目代码,发现有定义的常量类,也有枚举类,然后就在想着两者的功能差不多,那他们之间到底有什么区别呢,所以就决定 ...
- Jersey(1.19.1) - Client API, Ease of use and reusing JAX-RS artifacts
Since a resource is represented as a Java type it makes it easy to configure, pass around and inject ...
- Linux 命令 - uniq: 通知或忽略重复行
给定一个已排好序的文件,uniq 会删除重复行并将结果输出到标准输出中.uniq 通常与 sort 结合使用以删除 sort 输出内容中的重复行. 命令格式 uniq [OPTION]... [INP ...
- Linux 命令 - ftp: 网络文件传输工具
命令格式 ftp [-pinegvd] [host] 命令参数 -A 传输文件模式为主动模式. -p 传输文件模式为被动模式. -i 关闭交互模式. -n 关闭自动登录功能. -e 不记录历史命令. ...