文件和目录处理相关

image.png

文章来自: zhouxiaoshuai

文件和目录处理相关

题:

不断在文件hello.txt头部写入一行"hello world" 字符串,要求代码完整
考点:文件操作/写入操作;
延伸:目录操作函数,其他文件操作;

文件读写操作 文件系统函数

fopen():用来打开一个文件,打开是需要指定打开模式;

打开模式:
'r' 只读方式打开,将文件指针指向文件头。
'r+'    读写方式打开,将文件指针指向文件头。
'w' 写入方式打开,将文件指针指向文件头并将文件大小截为零(清空文件)。如果文件不存在则尝试创建之。
'w+'    读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
'a' 写入方式打开,将文件指针指向文件末尾(追加的形式)。如果文件不存在则尝试创建之。
'a+'    读写方式打开,将文件指针指向文件末尾(读写追加)。如果文件不存在则尝试创建之。
'x' 创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。这和给 底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。
'x+'    创建并以读写方式打开,其他的行为和 'x' 一样。
'b'     打开一个二进制文件。与此对应还可以使用 'b' 来强制使用二进制模式,这样就不会转换数据。要使用这些标记,要么用 'b' 或者用 't' 作为 mode 参数的最后一个字符。
't'     Windows 下提供了一个文本转换标记('t')可以透明地将 \n 转换为 \r\n
【b 和 t 是配合前面的四大类使用的】
写入操作:
  • fwrite():写入文件(可安全用于二进制文件);
  • fputs(): fwrite() 的别名;
读取函数:
  • fread():读取文件(可安全用于二进制文件);
  • fgets():从文件指针中读取一行;
  • fgetc(): 从文件指针中读取字符,从文件句柄中获取一个字符;
关闭文件:fclose():关闭一个已打开的文件指针;

如果不需要打开文件可以使用:

file_get_contents():将整个文件读入一个字符串;
file_put_contents():将一个字符串写入文件;

其他读取函数:
  • file():把整个文件读入一个数组中;
  • readfile():输出文件,读取文件并写入到输出缓冲。
访问一个远程文件[此文件不在本地服务器上]:
  • php.ini 中开启allow_url_fopen,(只用开启后,才能使用fopen或者file_get_contents进行远程读取),http协议连接只能使用只读模式,FTP协议可以使用只读或者只写模式;
目录相关操作:

名称相关:

  • basename():返回路径中的文件名部分,给出一个包含有指向一个文件的全路径的字符串,本函数返回基本的文件名。;
  • dirname():返回路径中的目录部分,给出一个包含有指向一个文件的全路径的字符串,本函数返回去掉文件名后的目录名。;
  • pathinfo():返回文件路径的信息,pathinfo() 返回一个关联数组包含有 path 的信息。返回关联数组还是字符串取决于 options[第二个参数]。
目录读取:目录函数
  • opendir():打开目录句柄;
  • readdir():从目录句柄中读取条目,返回目录中下一个文件的文件名。文件名以在文件系统中的排序返回。;
  • closedir():关闭目录句柄;
  • rewinddir():倒回目录句柄,将 dir_handle[参数] 指定的目录流重置到目录的开头。
目录删除:
  • remdir(): 删除目录,尝试删除 dirname 所指定的目录。 该目录必须是空的,而且要有相应的权限。 失败时会产生一个 E_WARNING 级别的错误。[使用时先遍历删除清空文件,然后删除目录];
目录创建:
  • mkdir():新建目录,尝试新建一个由 pathname 指定的目录。
文件大小:
  • filesize():取得指定文件的大小;
目录大小:首先要遍历目录下的文件,然后将文件大小相加;
磁盘大小:
  • disk_free_space():给出一个包含有一个目录的字符串,本函数将根据相应的文件系统或磁盘分区返回可用的字节数。;
  • disk_total_space():给出一个包含有一个目录的字符串,本函数将根据相应的文件系统或磁盘分区返回所有的字节数;
文件拷贝:
  • copy():拷贝文件;
文件类型:
  • filetype():取得文件类型,返回文件的类型。;
删除文件:
  • unlink():删除文件,和 Unix C 的 unlink() 函数相似。 发生错误时会产生一个 E_WARNING 级别的错误。
重命名文件和目录:
  • rename(): 重命名一个文件或目录,也可以移动目录位置;
文件截取:
  • ftruncate():将文件截断到给定的长度;
文件属性:
  • file_exists():检查文件或目录是否存在;
  • is_readalbe():判断给定文件名是否存在并且可读;
  • is_writeable():判断给定的文件名是否可写,如果文件存在并且可写则返回 TRUE。filename 参数可以是一个允许进行是否可写检查的目录名。
  • filectime():取得文件的 inode 修改时间;
  • fileatime():取得文件的上次访问时间;
  • filemtime(): 取得文件修改时间,本函数返回文件中的数据块上次被写入的时间,也就是说,文件的内容上次被修改的时间。
  • is_executable():判断给定文件名是否可执行。
其他函数:
  • flock():轻便的咨询文件锁定,许执行一个简单的可以在任何平台中使用的读取/写入模型;
  • fseek(): 在文件指针中定位;
  • ftell():返回文件指针读/写的位置,返回由 handle 指定的文件指针的位置,也就是文件流中的偏移量;
  • rewind():倒回文件指针的位置;

牢记文件操作函数以及几种打开模式,理解目录的操作步骤,练习完成目录的赋值和删除函数的编写;

练习题:
1. 通过PHP函数的方式对目录进行遍历,写出程序;
[注意:]遍历时,注意目录中子目录/文件名为0或者为空的,判断时是用  false !== 目录名
2. 不断在文件hello.txt头部写入一行"hello world" 字符串,要求代码完整
//不断在文件hello.txt头部加入一行 "hello world"
/**
 * 不断的在hello.txt文件中写入 hello world
 */
$file = './hello.txt';
// 打开文件
$handle = fopen($file, 'r');
//读取文件内容
$content = fread($handle, filesize($file));
//拼接文件内容
$content = 'hello world ' . $content;
//关闭文件
fclose($handle);
//再次打开文件
$handle = fopen($file, 'w');
//将内容写入文件
fwrite($handle, $content);
//将文件关闭
fclose($handle);
//通过PHP函数的方式对目录进行遍历,写出程序
$dir = './imooc';

function loopDir($dir)
{
    $handle = opendir($dir);
    //读取目录下的文件,判断是否是一个目录或者是文件
    while (false !== ($file = readdir($handle))){
        //如果是目录,排除 .和.. 当前目录和上级目录
        if ($file != '.' && $file != '..'){
            //输出文件名称
            echo $file . "
"; //如果是目录继续遍历目录 if (filetype($dir . '/' . $file) == 'dir'){ loopDir($dir . '/' . $file); } } } } loopDir($dir);

你可能感兴趣的:(文件和目录处理相关)