Perl檔案目錄操作
阿新 • • 發佈:2018-12-16
目錄
檔案操作
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