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 ...
随机推荐
- 关于Talend的Patch分支对应Eclipse开发环境的配置总结.
给产品打patch有时候会遇到很多问题,给产品打patch而且大多数是给很多老版本的Studio打,而且要有对应的patch的开发环境. 但是不巧有些patch对应的git仓库目录结构和一些其他版本的 ...
- EasyUI的datagrid获取所有正在编辑状态的行的行编号
今天项目需要用了下EasyUI的datagrid的行编辑功能,跟着API来,只要是将各种状态时的处理逻辑弄好,还是蛮不错的. 开发过程中,遇到了个问题,在编辑完成后我需要获取datagrid所有处于编 ...
- HttpClient(4.3.5) - HTTP Authentication
HttpClient provides full support for authentication schemes defined by the HTTP standard specificati ...
- 面试之SQL(2)--left join, inner join 和 right join的区别
表A记录如下: aID aName 1 a1 2 a2 3 a3 4 a4 5 a5 ...
- markdown编辑
有用的技巧之,如何实现首行空两格,把输入法切换成全角(shift+space),就可以实现一个两字符的空格了. 一级标题 二级标题 三级标题 四级标题 五级标题 六级标题 w s r s r s 文本 ...
- C#编写以管理员身份运行的程序
using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; names ...
- JQuery AJAX的嵌套使用
<script type="text/javascript"> $(function () { $.post("Ajax/HideHandler.ashx&q ...
- OC10_数组的内存管理
// // main.m // OC10_数组的内存管理 // // Created by zhangxueming on 15/6/18. // Copyright (c) 2015年 zhangx ...
- OpenGL3-绘制各种图元绘制
代码下载 #include "CELLWinApp.hpp"#include <gl/GLU.h>#include <assert.h>#include & ...
- (转)分布式搜索Elasticsearch——配置
配置文件位于%ES_HOME%/config/elasticsearch.yml文件中,用Editplus打开它,你便可以进行配置. 所有的配置都可以使用环境变量,例如: node.r ...