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. Content:"\2715",特殊字符和图标

    原文 项目中用到的一些特殊字符和图标 html代码 <div class="cross"></div> css代码 1 2 3 4 5 6 7 8 9 10 ...

  2. 整合spring boot时操作数据库时报错Caused by: java.lang.InstantiationException: tk.mybatis.mapper.provider.base.B

    原文:https://blog.csdn.net/u__f_o/article/details/82756701 一般出现这种情况,应该是没有扫描到对应的mapper包,即在启动类下配置MapperS ...

  3. 在windows系统搭建并运行一个Flutter项目

    搭建Flutter之前需要已经安装好相应的Flutter开发环境,如果没安装好相应环境的可以查看在windows系统搭建Flutter开发环境 搭建Flutter项目可以通过命令行搭建,或者通过and ...

  4. DataFactory连接MySQL数据库

    1.下载驱动 https://dev.mysql.com/downloads/connector/odbc/ 需要使用oracle登录账号密码后才能下载 下载完成后进行安装,一路下一步即可 2.连接m ...

  5. 性能优化 | Tomcat和JVM的性能调优总结

    Tomcat性能调优: 找到Tomcat根目录下的conf目录,修改server.xml文件的内容.对于这部分的调优,我所了解到的就是无非设置一下Tomcat服务器的最大并发数和Tomcat初始化时创 ...

  6. Docker-----关于dockerfile

    docker build参数说明 --no-cache :创建镜像的过程不使用缓存: --force-rm :设置镜像过程中删除中间容器: --network=host:容器会使用宿主机的网络,容器与 ...

  7. ubuntu下如何关闭某个端口?

    1. 开启防火墙 sudo ufw enable 2. 关闭某个端口,如80端口 sudo ufw deny 80 3. 查询当前防火墙状态 sudo ufw status

  8. 真正解决方案:phpMyAdmin #1089 - Incorrect prefix key; the storage engine doesn't support unique prefix key

    先直接给解决方案: 点击A_I后,不要输入大小,直接点击执行!!! 分析 当你在使用phpMyAdmin 创建数据库表的时候,一般我们需要设置一个主键,然后让其自增长,但是有时候当你设置完成后,你可能 ...

  9. mysql数据库指定ip远程访问

    1.登录 mysql -u root -p 之后输入密码进行登陆 2.权限设置及说明 2.1添加远程ip访问权限 GRANT ALL PRIVILEGES ON *.* TO 'root'@'192. ...

  10. 小D课堂 - 新版本微服务springcloud+Docker教程_5-03 feign结合hystrix断路器开发实战上

    笔记 3.Feign结合Hystrix断路器开发实战<上>     简介:讲解SpringCloud整合断路器的使用,用户服务异常情况 1.加入依赖          注意:网上新旧版本问 ...