您的位置:首页 > 其它

Perl语言入门笔记 第十二章 文件测试

2015-09-21 01:58 239 查看
=pod
第十二章    文件测试

文件测试操作符:
-e:判断文件是否存在
在创建新文件程序之前,应先检查指定的文件是否已经存在,以免意外覆盖重要的电子表格或是宝贵的生日档案。要达到此目的,我们可以用-e文件测试操作符来测试文件是否存在:
die "Oops ! A file called '$filename' already exists.\n";
if -e $filename;

-M:测试文件
warn "Config file is looking pretty old\n";
if -M CONFIG > 28;
CONFIG:为文件句柄,来检查CONFIG 28内是否改变过

-s:查找硬盘中的文件的大小
my @original_files = qw /fred barney betty wilma pebbles dino bamm-bamm /;
my @big_old_files; #将要移到备份磁带上的既大且旧的文件列表
foreach my $filename (@original_files)
{
push @big_old_files, $filename
if -s $filename > 100_000 and -A $filename > 90;
}

文件测试操作符    意义
-r              文件或目录,对目前(有效的)用户或组来说是可读的
-w              文件或目录,对目前(有效的)用户或组来说是可写的
-x              文件或目录,对目前(有效的)用户或组来说是可执行的
-o              文件或目录,由目前(有效的)用户拥有
-R              文件或目录,对实际的用户或组来说是可读的
-W              文件或目录,对实际的用户或组来说是可写的
-X              文件或目录,对实际的用户或组来说是可执行的
-O              文件或目录,由实际的用户拥有
-e              文件或目录是存在的
-z              文件存在且没有美容(对目录来说永远为假)
-s              文件或目录存在而且有内容(返回值是以字节为单位的文件的大小)
-f              是普通文件
-d              是目录
-l              是符号链接
-S              是socket类型的文件
-p              是命名管道,也就是先入先出队列
-b              是块设备(比如默哥可挂载的磁盘)
-c              是字符设备文件(比如某个IO设备)
-u              文件或目录设置了setuid位
-g              文件或目录设置了setgid位
-k              文件或目录设置了sticky位
-t              文件句柄是tty设备,(类似系统函数isatty()的测试,不能对文件名进行此测试)
-T              看起来像文本文件
-B              看起来像二进制文件
-M              最后一次被修改后至今的天数
-A              最后一次被访问后至今的天数
-C              最后一次文件节点编号(inode)被变更后至今的天数

上面的所谓的有效用户,指的是"负责"运行这个程序的人

my $size_in_k = (-s) / 1024; #获取文件是kb大小

测试同一文件的多项属性:
可读又可写
if(-r $file and -w $file)
{   ... }
虚拟文件句柄_(下划线)
if(-r $file and -w _)
{   ... }

if(-r $file)
{   print "The file is readable\n"; }
if(-w _)
{   print "The file is wirtable\n"; }

栈式文件测试操作符:
if(-w -r $file)
{   print "The file is both readable and writeable!\n"; }
use 5.010;
if(-r -w -x -o -d $file)
{   print "My directory is readable, writeable, and executable!\n"; }

if(-d $file and -s _ < 512)
{   print "The directory is less than 512 bytes!\n" }

stat和lstat函数:
my($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size, $atime, $mtime, $ctime, $blockzies, $blocks) = stat($fileName);

$dev, $ino
即文件所在的设备与文件的inode编号,这个编号决定了这个文件的唯一性,会想发给文件的编号,即使他有多个不同的文件名(使用应链接!\n)

$mode:
文件的权限集合

$nlink:
文件或目录的硬链接数,也就是这个条目有多少个真实名称

$uid和$gid
以数值形式表示文件拥有者的用户ID及组ID

$size:
以字节为单位文件大小,和-s文件操作符的返回值相同

$atime,$mtime,$ctime:
三种时间戳,但在这里是以系统的时间格式来表示

localtime函数:
my $timestamp = 118060098;
my $date = localtime $timestamp;

在列表上下文中,localtime会返回一个数字元素组成的列表,但其中有些元素不是你想要的:
my ($sec, $min, $hour, $day, $mon, $year, $wday, $yday, $yday, $listdst)
=   localtime $timestamp;

使用字符串:

=cut


简单测试:

#!/usr/bin/perl -w
use strict;

my $filename = "./file1";

die "Oops ! A file called $filename already exists.\n"
if -e $filename;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: