1.Perl 文件操作
Perl 使用一种叫做文件句柄类型的变量来操作文件。
从文件读取或者写入数据到文件需要使用文件句柄。
文件句柄(file handle)是一个I/O连接的名称。
Perl提供了三种文件句柄:STDIN,STDOUT,STDERR,分别代表标准输入、标准输出和标准出错输出。
Perl 中打开文件可以使用以下方式:
open FILEHANDLE, EXPR
open FILEHANDLE
sysopen FILEHANDLE, FILENAME, MODE, PERMS
sysopen FILEHANDLE, FILENAME, MODE
参数说明:
FILEHANDLE:文件句柄,用于存放一个文件唯一标识符。
EXPR:文件名及文件访问类型组成的表达式。
MODE:文件访问类型。
PERMS:访问权限位(permission bits)。
2.Open 函数
以下代码我们使用 open 函数以只读的方式(<)打开文件 file.txt:
open(DATA, "<file.txt");
<表示只读方式。
代码中的 DATA 为文件句柄用于读取文件。
2.1 < :以只读方式打开文件
#!/usr/bin/perl
open(DATA, "<file.txt") or die "file.txt 文件无法打开, $!";
while(<DATA>){
print "$_";
}
2.2 > :以写入方式打开文件
open(DATA, ">file.txt") or die "file.txt 文件无法打开, $!";
2.3 +<:以读写方式打开文件,且不删除文件原来的内容
open(DATA, "+<file.txt"); or die "file.txt 文件无法打开, $!";
这种方式不会删除文件原来的内容。
2.4 +>:以读写方式打开文件,但删除文件原来的内容
open DATA, "+>file.txt" or die "file.txt 文件无法打开, $!";
2.5 >>:以追加方式打开文件,且新追加的数据在原文件尾部
open(DATA,">>file.txt") || die "file.txt 文件无法打开, $!";
2.6 +>>:向现有文件的尾部追加数据,且需要读取要追加的文件内容
open(DATA,"+>>file.txt") || die "file.txt 文件无法打开, $!";
下表列出了不同的访问模式:
模式 描述
< 或 r 只读方式打开,将文件指针指向文件头。
> 或 w 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
>> 或 a 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
+< 或 r+ 读写方式打开,将文件指针指向文件头。
+> 或 w+ 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
+>> 或 a+ 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
3.Sysopen函数
sysopen 函数类似于 open 函数,只是它们的参数形式不一样。
3.1 以读写(+<filename)方式打开文件:
sysopen(DATA, "file.txt", O_RDWR);
3.2 以读写方式打开文件,且清空文件:
sysopen(DATA, "file.txt", O_RDWR|O_TRUNC );
O_CREAT 来创建一个新的文件, O_WRONLY 为只写模式, O_RDONLY 为只读模式。
The PERMS 参数为八进制属性值,表示文件创建后的权限,默认为 0x666。
下表列出了可能的模式值:
模式 描述
O_RDWR 读写方式打开,将文件指针指向文件头。
O_RDONLY 只读方式打开,将文件指针指向文件头。
O_WRONLY 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
O_CREAT 创建文件
O_APPEND 追加文件
O_TRUNC 将文件大小截为零
O_EXCL 测试文件是否存在,避免使用O_CREAT创建文件时因文件存在而报错
O_NONBLOCK 非阻塞I/O使我们的操作要么成功,要么立即返回错误,不被阻塞。
4.Close 函数
在文件使用完后,要关闭文件,以刷新与文件句柄相关联的输入输出缓冲区,关闭文件的语法如下:
close FILEHANDLE
close
FILEHANDLE 为指定的文件句柄,如果成功关闭则返回 true。
close(DATA) || die "无法关闭文件";
5.读写文件
向文件读写信息有以下几种不同的方式:
5.1 <FILEHANDL> 操作符
从打开的文件句柄读取信息的主要方法是 <FILEHANDLE> 操作符。
在标量上下文中,它从文件句柄返回单一行。
实例
#!/usr/bin/perl
print "123网址?\n";
$name = <STDIN>;
print "网址:$name\n";

当我们使用 <FILEHANDLE> 操作符时,它会返回文件句柄中每一行的列表,例如我们可以导入所有的行到数组中。
实现创建 import.txt 文件,内容如下:
$ cat import.txt
1
2
3
读取 import.txt 并将每一行放到 @lines 数组中:
实例
#!/usr/bin/perl
open(DATA,"<import.txt") or die "无法打开数据";
@lines = <DATA>;
print @lines; # 输出数组内容
close(DATA);
执行以上程序,输出结果为:
1
2
3
5.2 getc 函数
xgetc 函数从指定的 FILEHANDLE 返回单一的字符,如果没指定返回 STDIN:
getc FILEHANDLE
getc
如果发生错误,或在文件句柄在文件末尾,则返回 undef。
5.3 read 函数
read 函数用于从缓冲区的文件句柄读取信息。
这个函数用于从文件读取二进制数据。
read FILEHANDLE, SCALAR, LENGTH, OFFSET
read FILEHANDLE, SCALAR, LENGTH
参数说明:
FILEHANDLE:文件句柄,用于存放一个文件唯一标识符。
SCALAR:存贮结果,如果没有指定OFFSET,数据将放在SCALAR的开头。否则数据放在SCALAR中的OFFSET字节之后。
LENGTH:读取的内容长度。
OFFSET:偏移量。
如果读取成功返回读取的字节数,如果在文件结尾返回 0,如果发生错误返回 undef。
5.4 print 函数
对于所有从文件句柄中读取信息的函数,在后端主要的写入函数为 print:
print FILEHANDLE LIST
print LIST
print
利用文件句柄和 print 函数可以把程序运行的结果发给输出设备(STDOUT:标准输出),例如:
print "Hello World!\n";
5.5 文件拷贝
以下实例我们将打开一个已存在的文件 file1.txt ,并读取它的每一行写入到文件 file2.txt 中:
#!/usr/bin/perl
# 只读方式打开文件
open(DATA1, "<file1.txt");
# 打开新文件并写入
open(DATA2, ">file2.txt");
# 拷贝数据
while(<DATA1>)
{
print DATA2 $_;
}
close( DATA1 );
close( DATA2 );
5.6 文件重命名
以下实例,我们将已存在的文件 file1.txt 重命名为 file2.txt,指定的目录是在 /usr/abc/test/ 下:
#!/usr/bin/perl
rename ("/usr/abc/test/file1.txt", "/usr/abc/test/file2.txt" );
函数 renames 只接受两个参数,只对已存在的文件进行重命名。
5.7 删除文件
以下实例我们演示了如何使用 unlink 函数来删除文件:
#!/usr/bin/perl
unlink ("/usr/abc/test/file1.txt");
6.指定文件位置
你可以使用 tell 函数来获取文件的位置,并通过使用 seek 函数来指定文件内的的位置:
6.1 tell 函数
tell 函数用于获取文件位置:
tell FILEHANDLE
tell
如果指定 FILEHANDLE 该函数返回文件指针的位置,以字节计。如果没有指定则返回默认选取的文件句柄。
6.2 seek 函数
seek()函数是通过文件句柄来移动文件读写指针的方式来读取或写入文件的,以字节为单位进行读取和写入:
seek FILEHANDLE, POSITION, WHENCE
参数说明:
FILEHANDLE:文件句柄,用于存放一个文件唯一标识符。
POSITION:表示文件句柄(读写位置指针)要移动的字节数。
WHENCE:表示文件句柄(读写位置指针)开始移动时的起始位置,可以取的值为0、1、2;分别表示文件开头、当前位置和文件尾。
以下实例为从文件开头读取 256 个字节:
seek DATA, 256, 0;
7.文件信息
Perl 的文件操作也可以先测试文件是否存在,是否可读写等。
我们可以先创建 file1.txt 文件,内如如下:
$ cat file1.txt
www.abc.com
实例
#/usr/bin/perl
my $file = "/usr/test/abc/file1.txt";
my (@description, $size);
if (-e $file)
{
push @description, '是一个二进制文件' if (-B _);
push @description, '是一个socket(套接字)' if (-S _);
push @description, '是一个文本文件' if (-T _);
push @description, '是一个特殊块文件' if (-b _);
push @description, '是一个特殊字符文件' if (-c _);
push @description, '是一个目录' if (-d _);
push @description, '文件存在' if (-x _);
push @description, (($size = -s _)) ? "$size 字节" : '空';
print "$file 信息:", join(', ',@description),"\n";
}
执行以上程序,输出结果为:
file1.txt 信息:是一个文本文件, 15 字节
8.文件测试操作符如下表所示:
操作符 描述
-A 文件上一次被访问的时间(单位:天)
-B 是否为二进制文件
-C 文件的(inode)索引节点修改时间(单位:天)
-M 文件上一次被修改的时间(单位:天)
-O 文件被真实的UID所有
-R 文件或目录可以被真实的UID/GID读取
-S 为socket(套接字)
-T 是否为文本文件
-W 文件或目录可以被真实的UID/GID写入
-X 文件或目录可以被真实的UID/GID执行
-b 为block-special (特殊块)文件(如挂载磁盘)
-c 为character-special (特殊字符)文件(如I/O 设备)
-d 为目录
-e 文件或目录名存在
-f 为普通文件
-g 文件或目录具有setgid属性
-k 文件或目录设置了sticky位
-l 为符号链接
-o 文件被有效UID所有
-p 文件是命名管道(FIFO)
-r 文件可以被有效的UID/GID读取
-s 文件或目录存在且不为0(返回字节数)
-t 文件句柄为TTY(系统函数isatty()的返回结果;不能对文件名使用这个测试)
-u 文件或目录具有setuid属性
-w 文件可以被有效的UID/GID写入
-x 文件可以被有效的UID/GID执行
-z 文件存在,大小为0(目录恒为false),即是否为空文件,

16-Perl 文件操作的更多相关文章

  1. 分享:perl 文件操作总结

    发布:thebaby 来源:net [大 中 小] perl 文件操作,包括打开.关闭文件,读取.定入文件等.原文链接:http://www.jbxue.com/article/3153.html 打 ...

  2. perl文件操作

    Perl 文件操作 Perl 使用一种叫做文件句柄类型的变量来操作文件. 从文件读取或者写入数据需要使用文件句柄. 文件句柄(file handle)是一个I/O连接的名称. Perl提供了三种文件句 ...

  3. [Perl][文件操作]判断文件是否为符号链接(Unicode路径)

    Win32API::File 判断文件/文件夹是否为符号链接 Win32::Unicode 好像无法做这方面的判断,只能判断是否为目录.文件.文件是否存在. Win32API::File 则支持 Ge ...

  4. 16 - 文件操作-StringIO-BytesIO

    目录 1 文件操作 1.1 open函数介绍 1.2 打开操作 1.2.1 mode模式 1.2.2 文件指针 1.2.3 缓冲区 1.2.4 encoding编码 1.2.5 其他参数 1.3 读写 ...

  5. GO学习-(16) Go语言基础之文件操作

    Go语言文件操作 本文主要介绍了Go语言中文件读写的相关操作. 文件是什么? 计算机中的文件是存储在外部介质(通常是磁盘)上的数据集合,文件分为文本文件和二进制文件. 打开和关闭文件 os.Open( ...

  6. Python 实现隐藏文件夹、文件操作

    Python通过win32api 可以实现操作文件夹文件操作,获取属性,修改属性 1.获取属性 通过win32api.GetFileAttributes 方法可以获取属性值 import win32c ...

  7. Delphi文件操作函数

    文件是同一种类型元素的有序集合,是内存与外设之间传输数据的渠道.文件的本质是一个数据流,所有的文件实际上是一串二进制序列.文件管理包括:1.文件操作.2.目录操作.3.驱动器操作.三部分. 1.常见文 ...

  8. Python之路第一课Day3--随堂笔记(文件操作)

    一.集合的介绍 1.集合操作 集合是一个无序的,不重复的数据组合,它的主要作用如下: 去重,把一个列表变成集合,就自动去重了 关系测试,测试两组数据之前的交集.差集.并集等关系 常用操作 s = se ...

  9. JAVASE02-Unit06: 文件操作——File 、 文件操作—— RandomAccessFile

    Unit06: 文件操作--File . 文件操作-- RandomAccessFile java.io.FileFile的每一个实例是用来表示文件系统中的一个文件或目录 package day06; ...

随机推荐

  1. SQL和HQL 区别浅析!!!

    hql是面向对象查询,格式:from + 类名 + 类对象 + where + 对象的属性 sql是面向数据库表查询,格式:from + 表名 + where + 表中字段 1.查询 一般在hiber ...

  2. DDCTF-2019-writeup(7web+5misc)

    一年前第一次参加了DDCTF,再次参加简单记录下web与misc的writeup Web Web1 滴~ 1.jpg参数可以包含文件,参数经过两次base64和一次16进制编码,将index.php编 ...

  3. Linux设备驱动程序 之 获取当前时间

    墙上时间 内核一般通过jiffies来获取当前时间,该数值表示的是最近一次系统启动到当前的时间间隔,它和设备驱动程序无关,因为它的声明期只限于系统的运行期:但是驱动程序可以用jiffies来计算不同事 ...

  4. Linux设备驱动程序 之 RCU机制

    读取-复制-更新(read-copy-update,RCU)是一种高级的互斥机制,在正确的条件下,可以获得高的性能: RCU对它保护的数据结构做了一些限定,它针对经常发生读而很少发生写的情况做了优化, ...

  5. RedHat Enterprise7 搭建ISCSI

    IP 主机名 作用 10.45.129.113/24      外网 172.16.1.10/24        内网 rac1 RAC节点1 10.45.129.114/24      外网 172 ...

  6. nginx.conf 配置 (反向代理,负载均衡,fastdfs model)

    #user nobody;worker_processes 1; #error_log logs/error.log;#error_log logs/error.log notice;#error_l ...

  7. mysql 松散索引与紧凑索引扫描(引入数据结构)

    这一篇文章本来应该是放在 mysql 高性能日记中的,并且其优化程度并不高,但考虑到其特殊性和原理(索引结构也在这里稍微讲一下) 一,mysql 索引结构 (B.B+树) 要问到 mysql 的索引用 ...

  8. 导出文档设置exportDocument

    <?xml version="1.0" encoding="UTF-8"?> <?eclipse version="3.4" ...

  9. iis管理器的程序应用池中没有Asp.NET v4.0

    然后 windows + r 输入 cmd 然后输入CD C:\Windows\Microsoft.NET\Framework64\v4.0.30319 然后 输入 aspnet_regiis.exe ...

  10. Markdown 入门基础

    MarkDown基础语法 标题 通过 # 来实现标题效果.在markdown当中,标题与html相似,一共有六级标题. # 一级标题 ## 二级标题 ### 三级标题 #### 四级标题 ##### ...