java中的接口是类吗
285
2022-10-28
文件系统处理
一、文件系统概述
1、文件类型
UNIX系统中7中文件类型说明
文件类型 | 描述 |
Block | 块设备文件,如某个磁盘分区,软驱,光驱CD-ROW等 |
Char | 字符设备是指在I/O传输过程中以字符为单位进行传输的设备,例如键盘、打印机等 |
Dir | 目录类型,目录也是文件的一种 |
Fifo | 命名管道,常用于将信息从一个进程传输到另一个进程 |
File | 普通文本类型,如文本文件或可执行文件等 |
Link | 符号链接,是指向文件指针的指针,类似windows中的快捷方式 |
Unknown | 未知类型 |
在PHP中,可以通过filetype()函数获取文件的上述类型,该函数接受一个文件名作为参数。
对于一个已知的文件,可以使用is_file()函数判断给定的文件名是否为一个正常的文件;使用is_dir()函数判断给定的文件名是否是一个目录;使用is_link()函数判断给定的文件名是否为一个符号链接。
2、文件属性
PHP的文件属性处理函数
函数名 | 作用 | 参数 | 返回值 |
file_exists() | 检查文件或目录是否存在 | 文件名 | 存在返回TRUE |
filesize() | 取得文件大小 | 文件名 | 返回文件大小的字节数 |
file_readable() | 判断给定文件名是否可读 | 文件名 | TRUE 或者FALSE |
file_writable() | 判断给定文件名是否可写 | 文件名 | TRUE 或者FALSE |
file_executable() | 判断给定文件名是否可执行 | 文件名 | TRUE 或者FALSE |
filectime() | 取得文件的创建时间 | 文件名 | 返回UNIX时间戳格式 |
filemtime() | 取得文件的修改时间 | 文件名 | 返回UNIX时间戳格式 |
fileatime() | 取得文件的访问时间 | 文件名 | 返回UNIX时间戳格式 |
stat() | 获取文件大部分属性值 | 文件名 | 返回关于给定文件有用信息的数组 |
// /**
// */
function filetyp($filename){
//如果提供的文件或目录不存在,则直接退出函数
if(!file_exists($filename)){
echo "目标文件不存在!!!"."
";
return;
}
//判断是否是一个普通文件
if(is_file($filename)){
echo $filename."是一个文件"."
";
}
//判断是否是一个目录
if(is_dir($filename)){
echo $filename."是一个目录"."
";
}
//用定义的函数输出文件形态
echo "文件形态:".filetype($filename)."
";
//获取文件大小,并自定义转换单位
echo "文件大小".filesize($filename)."
";
if(is_readable($filename)){
echo "该文件可读"."
";
}
if(is_writable($filename)){
echo "该文件可写"."
";
}
if(is_executable($filename)){
echo "该文件可执行"."
";
}
echo "文件建立时间:".date("Y年m月d日",filectime($filename))."
";
echo "文件修改时间:".date("Y年m月d日",filemtime($filename))."
";
echo "文件访问时间:".date("Y年m月d日",fileatime($filename))."
";
}
/**
*/
function gfiletype($fileName){
switch(filetype($fileName)){
case "file": $type."=普通文件"; break;
case "dir": $type."=目录文件"; break;
case "block": $type."=块设备文件"; break;
case "char": $type."=字符设备文件"; break;
case "fifo": $type."=命名管道文件"; break;
case "link": $type."=符合链接"; break;
case "unknown": $type."=未知类型"; break;
default: $type."=没有检测到类型"; break;
}
return $type;
}
/**
自定义一个文件大小单位转换函数
*/
function gfilesize($bytes){
if($bytes>=pow(2,40)){
$return=round($bytes/pow(1024,4),2);
$suffix="TB";
}
elseif($bytes>=pow(2,30)){
$return=round($bytes/pow(1024,3),2);
$suffix="GB";
}
elseif($bytes>=pow(2,20)){
$return=round($bytes/pow(1024,2),2);
$suffix="MB";
}
elseif($bytes>=pow(2,10)){
$return=round($bytes/pow(1024,1),2);
$suffix="KB";
}
else{
$return=$bytes;
$suffix="byte";
}
return $return." ".$suffix;
}
//调用自定义函数,将当前目录下的t2.php文件传入,获取属性
filetyp("t2.php");
?>
代码运行结果为:
二、目录的基本操作
1、解析目录路径
在系统的每个目录下,都有两个特殊的目录“.”和“..”,分别指示当前目录和当前目录的父目录(上一级目录)。
2、遍历目录
即浏览某个目录下面的文件。
(1)函数operdir()用于打开指定目录,接受一个目录的路径及目录名作为参数。
(2)函数readdir()用于读取指定目录,接受已经用operdir()函数打开的可操作目录句柄作为参数。
(3)函数closedir()用于关闭指定目录,接受已经用operdir()函数打开的可操作目录句柄作为参数。
(4)函数rewinddir()倒回目录句柄,接受已经用operdir()函数打开的可操作目录句柄作为参数。
下面用一个实例来说明以上几个函数的使用方法。注意,在使用该例子前请确保同一目录下有phpMyAdmin文件夹。
$num=0;
$dirname="phpMyAdmin"; //dirname可用其他字母代替
$dir_handle=opendir($dirname); //dir_handle可用其他字母代替
//将遍历的目录和文件名使用表格格式输出
echo "
文件名 | 文件大小 | 文件类型 | 修改时间 | ";
---|---|---|---|
'.$file.' | ';'.filesize($dirfile).' | ';'.filetype($dirfile).' | ';'.date('Y/m/d',filemtime($dirfile)).' | ';
closedir($dir_handle);
echo "在".$dirname."目录下的子目录和文件共有".$num. "个";
?>
程序运行结果如下所示:
3、统计目录大小
用filesize()函数计算文件大小,用disk_free_space()和disk_total_space()两个函数统计磁盘大小。
/**
自定义一个函数dirsize()统计传入参数的目录大小
@param string $directory 目录名称
@return double 目录的尺寸大小
*/
function dirsize($directory){
$dir_size=0; //用来累加各个文件大小
if($dir_handle=opendir($directory)){ //打开目录,并判断是否能成功打开
while($filename=readdir($dir_handle)){ //循环遍历目录下的所有文件
if($filename!="."&&$filename!=".."){ //一定要排除两个特殊的目录
$subfile=$directory."/".$filename; //将目录下的子文件和 当前目录相连
if(is_dir($subfile)){ //如果为目录
$dir_size+=dirsize($subfile); //递归地调用自 身函数,求子目录的大小
}
if(is_file($subfile)){ //如果是文件
$dir_size+=filesize($subfile); //求出文件的大 小并累加
}
}
}
closedir($dir_handle);
return $dir_size; //返回计算后的目录大小
}
}
$dir_size=dirsize("phpMyAdmin");
echo round($dir_size/pow(1024,1),2)."KB"; //字节数转换为KB单位
?>
4、建立和删除目录
在PHP中,使用mkdir()函数只需要传入一个目录名就可以很容易地建立一个新目录。但删除目录所用的函数rmdir()只能删除一个空目录并且目录必须存在。如果是非空的目录就需要先进入到目录中,使用unlink()函数将目录中的每个文件都删掉,再回来将这个空目录删除。如果目录中还存在子目录,而且子目录也非空,就要使用递归的方法了。自定义递归函数删除目录的代码程序如下所示:
/**
自定义函数递归地删除整个目录
@param string $directory 目录名称
*/
function deldir($directory){
if(file_exists($directory)){ //如果不存在rmdir()函数会出错
if($dir_handle=opendir($directory)){ //打开目录并判断是否成功
while($filename=readdir($dir_handle)){ //循环遍历函数
if($filename!="."&&$filename!=".."){ //一定要排除两个特 殊的目录
$subfile=$directory."/".$filename; //将目录下的 文件和当前目录连接
if(is_dir($subfile)){ //如果是目录
deldir($subfile); //递归调用自己删 除子目录
}
if(is_file($subfile)){ //如果是文件
unlink($subfile); //直接删除这个文 件
}
}
}
closedir($dir_handle);
rmdir($directory);
}
}
}
deldir("phpMyAdmin");
?>
5、复制目录
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~