第十三课:文件及目录操作
大多数程序都不是孤立的,它们与它们的环境相互作用。很多的程序也需要通过文件操作实现数据的存贮和交换。 文件句柄(file handle)是Perl程序中为程序和外部世界提供I/O连接的名称。建议全部使用大写字母以示与变量等的区别。特别地,也可以将STDIN/STDOUT/STDERR也认为
是Perl的文件句柄,分别代表标准输入/标准输出/标准错误输出。
打开及关闭文件
Perl的文件操作与C语言极为相似。如:
open(FILENAME,"abc.txt");
该调用为读文件打开,若为写文件而打开,需在文件名前加上大于号:
open(FILENAME,">abc.txt");
若要追加至文件尾,可在文件名前加上两个大于号:
open(FILENAME,">>abc.txt");
以上三种open()格式在成功时返回真,失败时返回假。但程序中通常没有提示,出错时往往会被人们忽略。
通常当需要给出出错提示时,可加入die()函数。例:
open(OUTFILE,">/tmp/outfile")||
die "出错,不能建立/tmp/outfile\n";
当只有open失败时,才会执行die给出出错提示。
对文件句柄的操作完成后,可以用close操作符关闭文件。如:
close(OUTFILE);
-x 文件测试
Perl的文件操作也可以先测试文件是否存在,是否可读写等。如:
$x="abc.txt";
if(-e $x) { #abc.txt是否存在?
# 存在操作
} else {
printf "文件不存在。\n";
}
-e操作符测试文件或目录是否存在。
以下为文件测试清单:
| 文件测试 | 测试操作符提供的信息 |
| -r | 文件或目录可读 |
| -w | 文件或目录可写 |
| -x | 文件或目录执行 |
| -o | 文件或目录归用户所有 |
| -R | 文件或目录对真正用户可读 |
| -W | 文件或目录对真正用户可写 |
| -X | 文件或目录对真正用户执行 |
| -O | 文件或目录归真正用户所有 |
| -e | 文件或目录存在 |
| -z | 文件存在且大小为0 |
| -s | 文件或目录存在且不为0(返回字节数) |
| -f | 文件为普通文件 |
| -d | 文件为目录 |
| -l | 文件为符号链接 |
| -p | 文件为命名管道(FIFO) |
| -S | 文件为一个套口(socket) |
| -b | 文件为块特殊文件 |
| -c | 文件为字符特殊文件 |
| -t | 打开tty控制台的文件句柄 |
| -u | 文件或目录是设置用户ID号 |
| -g | 文件或目录是设置用户组ID号 |
| -k | 文件或目录的sticky位置位 |
| -T | 文件是文本文件 |
| -B | 文件是二进制文件 |
| -M | 以天为单位的存在时间 |
| -A | 以天为单位访问时间 |
| -C | 以天为单位同代码更改时间 |