Perl文件目录操作

目录

 

文件操作

open函数

close函数

读写文件

文件重命名

demo

删除文件

 

目录操作

function

demo


文件操作

Perl文件操作比较好理解,将文件open后得到一个handle,通过这个handle对文件进行操作,和Linux相关系统接口非常类似,这个handle可以理解为Linux接口里的文件描述符。支持3种标准HANDLE:STDIN、STDOUT、STDERR。

open函数

open(HANDLE, ">file.txt");
sysopen(HANDLE, "file.txt", O_RDWR, PERMS);

open函数打开文件模式,参照下表:

模式描述
< 或 r只读方式打开,将文件指针指向文件头。
> 或 w写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
>> 或 a写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
+< 或 r+读写方式打开,将文件指针指向文件头。
+> 或 w+读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
+>> 或 a+读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。

sysopen函数打开文件模式,参照下表:

模式描述
O_RDWR读写方式打开,将文件指针指向文件头。
O_RDONLY只读方式打开,将文件指针指向文件头。
O_WRONLY写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
O_CREAT创建文件
O_APPEND追加文件
O_TRUNC将文件大小截为零
O_EXCL如果使用O_CREAT时文件存在,就返回错误信息,它可以测试文件是否存在
O_NONBLOCK非阻塞I/O使我们的操作要么成功,要么立即返回错误,不被阻塞。

sysopen函数最后一个参数PERMS代表8进制属性值,可选,默认是0x666.

close函数

打开文件后,如果不再使用该文件,就需要对该文件进行close,否则它占用的资源就不会释放。

close(HANDLE);

读写文件

读文件

<HANDLE> 从HANDLE中读取一行,可以作为右值直接赋给左边的标量。

写文件

print HANDLE "string";  用print函数向HANDLE指向的文件中写入后面的数据。

文件重命名

rename(originName, targetName);

demo

#!/usr/bin/perl 
$PATH="/home/hunk/code/Project_Code_Exercise/perl/basic";
open(HANDLE1, ">file1.txt");
print HANDLE1 "HELLO HANDLE1.\n";
print STDOUT "HELLO STDOUT.\n";
close(HANDLE1);

#copy from file1.txt to file2.txt
open(HANDLE1, "<file1.txt");
open(HANDLE2, ">>file2.txt");
while(<HANDLE1>)
{
     print HANDLE2 $_;
}
print HANDLE2 "HELLO HANDLE2.\n";
close(HANDLE1);
close(HANDLE2);

#rename file
rename("$PATH/file1.txt", "$PATH/file1_copy.txt");
root@n209-h246:/home/hunk/code/Project_Code_Exercise/perl/basic# ./fileOper.pl 
HELLO STDOUT.
root@n209-h246:/home/hunk/code/Project_Code_Exercise/perl/basic# cat file1_copy.txt 
HELLO HANDLE1.
root@n209-h246:/home/hunk/code/Project_Code_Exercise/perl/basic# cat file2.txt 
HELLO HANDLE1.
HELLO HANDLE2.

删除文件

#!/usr/bin/perl
unlink("/home/hunk/code/Project_Code_Exercise/perl/basic/file2.txt");
root@n209-h246:/home/hunk/code/Project_Code_Exercise/perl/basic# ll |grep file2
-rw-r--r-- 1 root root   30 8月  21 21:15 file2.txt
root@n209-h246:/home/hunk/code/Project_Code_Exercise/perl/basic# ./fileOper2.pl 
root@n209-h246:/home/hunk/code/Project_Code_Exercise/perl/basic# ll |grep file2
root@n209-h246:/home/hunk/code/Project_Code_Exercise/perl/basic# vim fileOper2.pl
root@n209-h246:/home/hunk/code/Project_Code_Exercise/perl/basic#

 

目录操作

和文件操作类似

function

opendir(HANDLE, dirPath);  #打开目录
readdir(HANDLE);           #读取目录
rewinddir(HANDLE);         #定位指针到目录开头
telldir(HANDLE);           #返回目录当前位置
seekdir(HANDLE, POS);      #定位到目录的POS位置
close(HANDLE);
mkdir(dirPath);            #创建目录,默认权限是0755,目录已经存在则会失败
rmdir(dirPath);            #删除目录

demo

  1 #!/usr/bin/perl -w
  2 print "==========CASE1=========\n";
  3 $dir = "/home/*";
  4 my @files = glob($dir);
  5 foreach (@files){
  6     print $_."\n";
  7 }
  8 
  9 print "==========CASE2=========\n";
 10 opendir(DIR, '.') or die "open current dir failed, $!";
 11 while($file = readdir(DIR)){
 12     print "$file\n";
 13 }
 14 closedir DIR;
 15 
 16 print "==========CASE3=========\n";
 17 $dir = "/home/test";
 18 rmdir($dir);
 19 mkdir($dir) or die "create dir failed,$!";
 20 print "create dir success.\n";
 21 rmdir($dir) or die "delete dir failed, $!";
 22 print "delete dir success.\n";
 23 $dir = "/home";
 24 chdir($dir) or die "change dir failed, $!";
 25 print "change dir success.\n";
 26 $currPath = readpipe("pwd");
 27 print "current work path: $currPath.\n";
[root@izuf682lz6444cynn96up0z basic]# ./dictOper.pl 
==========CASE1=========
/home/workspace
==========CASE2=========
warn.pl
array1.pl
reference1.pl
reference2.pl
function.pl
.
dictOper.pl
until.pl
hello.pl
array.pl
array2.pl
..
control.pl
type.pl
reference.pl
foreach.pl
hash.pl
==========CASE3=========
create dir success.
delete dir success.
change dir success.
current work path: /home

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值