1. 程式人生 > >Perl檔案目錄操作

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");
[email protected]:/home/hunk/code/Project_Code_Exercise/perl/basic# ./fileOper.pl 
HELLO STDOUT.
[email protected]:/home/hunk/code/Project_Code_Exercise/perl/basic# cat file1_copy.txt 
HELLO HANDLE1.
[email protected]:/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");
[email protected]:/home/hunk/code/Project_Code_Exercise/perl/basic# ll |grep file2
-rw-r--r-- 1 root root   30 8月  21 21:15 file2.txt
[email protected]:/home/hunk/code/Project_Code_Exercise/perl/basic# ./fileOper2.pl 
[email protected]:/home/hunk/code/Project_Code_Exercise/perl/basic# ll |grep file2
[email protected]:/home/hunk/code/Project_Code_Exercise/perl/basic# vim fileOper2.pl
[email protected]:/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";
[[email protected] 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