PHP文件操作:遍历文件目录
<?php
/*遍历目录,列出目录中的文件
* array scandir(string $directory [,int $sorting_order])
* $directory为待遍历目录的路径名,$sorting_order为可选参数,设置文件的降序或者升序排列
* */
$path='./'; //为当前目录
if(file_exists($path)){
$files_asc=scandir($path);
$files_desc=scandir($path,1); echo '<p>该目录下的文件(升序排列):<br>';
print_r($files_asc);
echo '<p>该目录下的文件(降序排序):<br>';
print_r($files_desc);
}
else{
echo'该目录不存在!';
} /*递归的遍历所在目录及其所有子目录,即所谓的遍历目录树*/
/*
* 递归函数
* 遍历目录树
* 输入参数:目录路径
* 输出结果:多维数组表示的目录树
* */
function GetDirFree($path){
$tree = array();
$tmp = array(); if(!is_dir($path)) return null; //如果不是路径则返回null $files = scandir($path); //列出当前目录下的所有文件和目录 foreach($files as $value){
if($value=='.'||$value=='..') //跳过当前的目录名和父目录名
continue; $full_path = $path.'/'.$value; //获取子文件或目录的完整路径
if(is_dir($full_path)){
$tree[$value]=GetDirFree($full_path);
}
else{
$tmp[]=$value;
}
}
//将文件添加到结果数组末尾
$tree = array_merge($tree,$tmp);
return $tree;
}
//$path='./';
echo '<br>'.'递归遍历目录及其子目录';
print_r(GetDirFree($path)); /*复制、移动目录*/
/*递归函数
* 复制目录
* 输入参数:源目录路径,目的目录路径
* 输出目录;复制成功则返回TRUE,否则返回false*/ function copyDir($source_path,$dest_path){
if(!is_dir($source_path)){ //如果不是路径则返回false
return false;
}
if(!file_exists($dest_path)){ //如果不存在目录则创建目录
if(!mkdir($dest_path)) return false;
} $files=scandir($source_path);
foreach($files as $value){
if($value=='.'||$value=='..') continue; //跳过当前的目录名和父目录名 $child_source_path=$source_path.'/'.$value; //获取子文件或目录的完整路径 $child_dest_path=$dest_path.'/'.$value; if(is_dir($child_source_path)){ //如果存在子目录,则复制子目录
if(!copyDir($source_path, $dest_path)){
return false;
}
}
else {
if(!copy($child_source_path,$child_dest_path)){
return false; //复制子文件
}
}
} return true;
} $source_path='./test_dir';
$dest_path='./copy_test_dir';
$result=copyDir($source_path, $dest_path);
if($result) echo '目录复制成功';
else echo '目录复制失败'; /*递归删除目录
* 删除目录内容
* 输入参数:目录路径
* 输出结果:删除成功则返回true,否则返回false
* */
function delDir($path){
if(!is_dir($path)) return false;
if(!file_exists($path)) return false; $files=scandir($path);
foreach($files as $value){
if($value=='.'||$value=='..') continue; $child_path=$path.'/'.$value;
if(is_dir($child_path)){
if(!delDir($child_path)){
return false;
}
}
else{
if(!unlink($child_path)){
return false;
}
}
}
if(!rmdir($path)) return false;
return true;
}
$path='./copy_test_dir';
$result=delDir($path);
if($result) echo'目录删除成功';
else echo'目录删除失败'; /*移动目录,是复制目录和删除目录的结合
* 递归函数
* 移动目录内容
* 输入参数:原目录路径,目的目录路径
* 输出结果:移动成功则返回true,反正返回false
* 使用copydir()函数和deldir()函数*/
function moveDir($source_path,$dest_path){
if(!copyDir($source_path, $dest_path)) return false;
if(!delDir($source_path)) return false;
return true;
} $source_path='./test_dir';
$dest_path='./move_test_dir';
$result=moveDir($source_path, $dest_path);
if($result) echo '目录移动成功!';
else echo'移动失败'; ?>
PHP文件操作:遍历文件目录的更多相关文章
- node.js整理 03文件操作-遍历目录和文本编码
遍历目录 递归算法 遍历目录时一般使用递归算法,否则就难以编写出简洁的代码. 递归算法与数学归纳法类似,通过不断缩小问题的规模来解决问题 function factorial(n) { if (n = ...
- 使用php glob函数查找文件,遍历文件目录(转)
函数说明:array glob ( string $pattern [, int $flags ] )功能:寻找与模式匹配的文件路径,返回包含匹配文件(目录)的数组(注:被检查的文件必须是服务器系统的 ...
- Java 利用FTP上传,下载文件,遍历文件目录
Java实现FTP上传下载文件的工具包有很多,这里我采用Java自带的API,实现FTP上传下载文件.另外JDK1.7以前的版本与其之后版本的API有了较大的改变了. 例如: JDK1.7之前 JDK ...
- ASP.NET中的文件操作(文件信息,新建,移动,复制,重命名,上传,遍历)(亲测详细)
做了几天的文件操作,现在来总结一下,错误之处,还望指点!以文件为例,如果对文件夹操作,基本上将File换为Directory即可(例:FileInfo file = new FileInfo(Path ...
- php文件夹与文件目录操作函数
在php中一些常用的文件夹/文件目录操作函数总结. php文件夹操作函数 string basename ( string path [, string suffix] ) 给出一个包含有指向一个文件 ...
- paip.c++ qt 目录遍历以及文件操作
paip.c++ qt 目录遍历以及文件操作 作者Attilax , EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn.net/a ...
- PowerShell~文件操作和对象遍历
ps提供了丰富的文件操作,如建立,删除,改名,移动,复制,文件夹建立,显示文件列表,同时对数组对象的遍历也很方便,如果在使用PS脚本时,希望现时传入参数,可以把参数声明为param,当然需要把它写在文 ...
- C数据结构(文件操作,随机数,排序,栈和队列,图和遍历,最小生成树,最短路径)程序例子
文件操作 文件打开方式 意义 ”r” 只读打开一个文本文件,只允许读数据 ”w” 只写打开或建立一个文本文件,只允许写数据 ”a” 追加打开一个文本 ...
- python文件夹遍历,文件操作,获取文件修改创建时间
在Python中,文件操作主要来自os模块,主要方法如下: os.listdir(dirname):列出dirname下的目录和文件os.getcwd():获得当前工作目录os.curdir:返回当前 ...
- 《Java核心技术卷二》笔记(二)文件操作和内存映射文件
文件操作 上一篇已经总结了流操作,其中也包括文件的读写.文件系统除了读写以为还有很多其他的操作,如复制.移动.删除.目录浏览.属性读写等.在Java7之前,一直使用File类用于文件的操作.Java7 ...
随机推荐
- POST在发送数据的时候使用的是HTTP命令
防止SQL注入 SQL(结构化查询语言)是基于美国国家标准学会(ANSI)标准,并作为共同的语言与数据库通信.每个数据库系统增加了一些专有功能到基本的ANSI SQL. SQL注入是一门将制作好的SQ ...
- Angular2对待一个URL的处理流程
直到一年前我还不会想到我会写一本书出来,直到两三年前我还不会想到会把自己的业余时间放在写作(技术博客)上.当初在机缘巧合之下,我只是想把自己工作中遇到的问题总结起来,发布在博客中以供日后查阅.不想竟然 ...
- Codeforces Round #384 (Div. 2) E
给出n个数字 1-8之间 要求选出来一个子序列 使里面1-8的数字个数 极差<=1 并且相同数字必须相邻(112 可以但是121不行)求这个子序列的最长长度 一道状压dp 看不懂别人的dp思想. ...
- Java简单类——多对多映射
class Admin { private String aid ; private String password ; private Role role ; public Admin(String ...
- NONUNIFORM MEMORY ACCESS
COMPUTER ORGANIZATION AND ARCHITECTURE DESIGNING FOR PERFORMANCE NINTH EDITION In terms of commercia ...
- 提高Baidu Map聚合的效率
百度的MAP的例子里提供了一个聚合效果,地址是http://developer.baidu.com/map/jsdemo.htm#c1_4 ,效果图如下图: 这个效果很赞,但效率很低,当数据量达到50 ...
- VS2012 提示未找到与约束 ContractName 匹配的倒出
问题描述: 今天由于开发需要,我安装了一下 Vs 2015 按照之后 打开原来的项目 vs2012 打开,点击类文件提示错误 未找到与约束 ContractName 匹配的倒出 解决办法: 1 去微 ...
- 常用数据存储集合与Map
一.常见的数据存储实现 二.遍历 1.集合 新循环 迭代器 Iterator Iterator<?> it = C.iterator(); // 问.取.删 it.hasNext() ...
- C/C++语言,自学资源,滚动更新中……
首先要说<一本通>是一个很好的学习C/C++语言的自学教材. 以下教学视频中,缺少对"字符串"技术的讨论,大家注意看书. 一维数组,及其举例:(第四版) ...
- html中submit和button的区别/ window.location.href 不跳转 的问题
<input type="button"> <input type="submit"> 这两个的区别 是 button 不会自动提交表 ...