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 ...
随机推荐
- linux开机启动配置
vim /etc/rc.d/rc.local 把命令写在这里
- 给jdk写注释系列之jdk1.6容器(12)-PriorityQueue源码解析
PriorityQueue是一种什么样的容器呢?看过前面的几个jdk容器分析的话,看到Queue这个单词你一定会,哦~这是一种队列.是的,PriorityQueue是一种队列,但是它又是一种什么样的队 ...
- HTML5 indexedDB数据库的入门学习(二)
上一篇关于indexedDB的学习笔记主要写了indexedDB数据库的基本操作—增删改查:但是为什么我们要用indexedDB呢?为什么indexedDB受到了开发者们的青睐呢?最主要的就是inde ...
- TortoiseGit无法勾选Load Putty Key,该选项为灰色的解决办法
1.软件版本 Git版本:Git-1.9.0-preview20140217.exe TortoiseGit:TortoiseGit-1.8.8.0-64bit.msi 2.出现问题 使用右键 ...
- Android中将Bitmap对象以PNG格式保存在内部存储中
在Android中进行图像处理的任务时,有时我们希望将处理后的结果以图像文件的格式保存在内部存储空间中,本文以此为目的,介绍将Bitmap对象的数据以PNG格式保存下来的方法. 1.添加权限 由于是对 ...
- [改善Java代码]不要随便设置随机种子
建议30: 不要随便设置随机种子 随机数在太多的地方使用了,比如加密.混淆数据等,我们使用随机数是期望获得一个唯一的.不可仿造的数字,以避免产生相同的业务数据造成混乱.在Java项目中通常是通过Mat ...
- poj 3254 状态压缩DP
思路:把每行的数当做是一个二进制串,0不变,1变或不变,找出所有的合法二进制形式表示的整数,即相邻不同为1,那么第i-1行与第i行的状态转移方程为dp[i][j]+=dp[i-1][k]: 这个方程得 ...
- AngularJS学习手册
看书和视频结合是学习的最高效方式,看了这本书之后对angularjs才算是有一定的理解了.这本书以搭建一个博客为线索讲解了angularjs的知识点和实际项目开发流程.非常适合初学者!下面是我的读书笔 ...
- MySQL数据库中的触发器
--触发器是一类特殊的监控增删改操作,并产生相应的增删改的操作 --1,监视谁 2,监视动作 3,监视时间(之前或之后) 4,触发的事件 --触发器的简单语法 create trigger 触发器名字 ...
- Lombok(1.14.8) - @SneakyThrows
@SneakyThrows @SneakyThrows,声明异常. package com.huey.lombok; import java.io.UnsupportedEncodingExcepti ...