Perl 檔案的開啟和關閉


Perl中有以下兩個具有多種形式的函式,可用於開啟任何新的或現有的檔案。

open FILEHANDLE, EXPR
open FILEHANDLE

sysopen FILEHANDLE, FILENAME, MODE, PERMS
sysopen FILEHANDLE, FILENAME, MODE

這裡FILEHANDLE是**open**函式返回的檔案控制代碼,EXPR是包含檔名和開啟檔案模式的表示式。

Open 函式

以下是以只讀模式開啟**file.txt**的語法。小於號<表示檔案必須以只讀模式開啟。

open(DATA, "<file.txt");

這裡DATA是檔案控制代碼,將用於讀取檔案。以下示例將開啟一個檔案並將它的內容列印到螢幕上。

#!/usr/bin/perl
open(DATA, "<file.txt") or die "Couldn't open file file.txt, $!";
while(<DATA>) {
   print "$_";
}

以下是以寫入模式開啟file.txt的語法。大於號>表示檔案必須以寫入模式開啟。

open(DATA, ">file.txt") or die "Couldn't open file file.txt, $!";

此示例在開啟檔案進行寫入之前實際上會截斷(清空)檔案,這可能並非所需效果。如果要開啟檔案進行讀寫,可以在>或<字元前加一個加號。

例如,要開啟檔案進行更新而不截斷它:

open(DATA, "+<file.txt"); or die "Couldn't open file file.txt, $!";

要先截斷檔案:

open DATA, "+>file.txt" or die "Couldn't open file file.txt, $!";

可以以追加模式開啟檔案。在此模式下,寫入點將設定為檔案的末尾。

open(DATA,">>file.txt") || die "Couldn't open file file.txt, $!";

雙>>以追加模式開啟檔案,將檔案指標放在末尾,以便可以立即開始追加資訊。但是,除非在它前面也放置一個加號,否則無法從中讀取:

open(DATA,"+>>file.txt") || die "Couldn't open file file.txt, $!";

下表列出了不同模式的可能值

序號實體及定義
1< 或 r
只讀訪問
2> 或 w
建立、寫入和截斷
3>> 或 a
寫入、追加和建立
4+< 或 r+
讀寫
5+> 或 w+
只讀訪問
6+>> 或 a+
只讀訪問

Sysopen 函式

Perl 中的**sysopen**函式類似於主要的open函式,不同之處在於它使用系統**open()**函式,並使用提供的引數作為系統函式的引數:

例如,要開啟檔案進行更新,模擬open中的**+<filename**格式:

sysopen(DATA, "file.txt", O_RDWR);

或者在更新前截斷檔案:

sysopen(DATA, "file.txt", O_RDWR|O_TRUNC );

可以使用O_CREAT建立新檔案,使用O_WRONLY以只寫模式開啟檔案,使用O_RDONLY以只讀模式開啟檔案。

如果必須建立**PERMS**引數指定指定檔案的許可權。預設情況下,它取**0x666**。

下表列出了MODE的可能值。

序號實體及定義
1O_RDWR
讀寫
2O_RDONLY
只讀
3O_WRONLY
只寫
4O_CREAT
建立檔案
5O_APPEND
追加到檔案
6O_TRUNC
截斷檔案
7O_EXCL
如果檔案已存在則停止
8O_NONBLOCK
非阻塞可用性

Close 函式

要關閉檔案控制代碼,從而取消檔案控制代碼與相應檔案的關聯,可以使用**close**函式。這將重新整理檔案控制代碼的緩衝區並關閉系統的檔案描述符。

close FILEHANDLE
close

如果沒有指定FILEHANDLE,則它將關閉當前選定的檔案控制代碼。只有在成功重新整理緩衝區並關閉檔案時,它才返回true。

close(DATA) || die "Couldn't close file properly";

更新於:2019年11月29日

3K+ 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.