珀尔 |打开和读取文件
文件句柄是一种内部 Perl 结构,它将物理文件与名称相关联。所有文件句柄都具有读/写访问权限,因此一旦将文件句柄附加到文件读/写就可以完成。但是,在关联文件句柄时要指定打开文件句柄的模式。
打开函数用于打开一个新文件或一个现有文件。
Syntax: open FILEHANDLE, VAR
这里 FILEHANDLE 是 open函数返回的句柄, VAR 是具有文件名和打开文件模式的表达式。
下表显示了可以打开文件和访问各种操作的模式。
Mode | Description |
---|---|
r or < | Read Only Access |
w or > | Creates, Writes, and Truncates |
a or >> | Writes, Appends, and Creates |
r+ or +< | Reads and Writes |
w+ or +> | Reads, Writes, Creates, and Truncates |
a+ or +>> | Reads, Writes, Appends, and Creates |
一旦为 FILEHANDLE 分配了一个文件,就可以进行各种操作,如读、写和追加。有许多不同的方式来读取文件。
- 使用文件句柄运算符
- 使用 getc函数
- 使用读取函数
- 文件句柄运算符
从打开的文件句柄中读取信息的主要方法是使用运算符< > 。在列表上下文中使用 < >运算符时,它会从指定的文件句柄返回行列表。下面的示例从文件中读取一行并将其存储在标量中。让文件“GFG.txt”的内容如下:
GeeksforGeeks Hello Geek Geek a revolution Geeks are the best
示例:GFG.pl
# Opening the file open(fh, "GFG.txt") or die "File '$filename' can't be opened"; # Reading First line from the file $firstline =
; print "$firstline\n"; 输出 :
- getc函数
getc函数从指定的 FILEHANDLE 返回单个字符,如果未指定则返回 STDINSyntax: getc FILEHANDLE
# Opening the file open(fh, "GFG.txt") or die "File '$filename' can't be opened"; # Reading First char from the file $firstchar = getc(fh); print "$firstchar\n";
输出:
如果出现错误或文件句柄位于文件末尾,则返回 undef。
- 读取函数
read函数用于使用文件句柄从文件中读取二进制数据。Syntax
read FILEHANDLE, SCALAR, LENGTH, OFFSET
read FILEHANDLE, SCALAR, LENGTH这里,LENGTH 表示要读取的数据的长度,如果没有指定 OFFSET,则数据放在 SCALAR 的开头。否则,数据将放在 SCALAR 中的偏移字节之后。文件读取成功时,函数返回读取的字节数,文件末尾为零,如果有错误,则返回 undef。
一次读取多行
下面显示的示例读取文件句柄指定的文件内容,直到到达文件结束(EOF)。示例:文件.pl
# Opening the file open(FH, "GFG.txt")or die "Sorry!! couldn't open"; print "Reading file \n"; # Reading the file till FH reaches EOF while(
) { # Printing one line at a time print $_; } close; 输出 :
文件中的异常处理
异常处理有两种方式- 如果文件无法打开,则抛出异常
- 如果文件无法打开并继续运行,则发出警告
- 抛出异常
当当时无法为文件句柄分配有效的文件指针时,将执行 die 打印消息并终止当前程序。
例子 :# Initializing filename $filename = 'GFG1.txt'; # Prints an error and exits if file not found open(fh, '<', $filename) or die "Couldn't Open file $filename";
输出:
如果找不到文件并从代码中退出,上面的代码会打印错误。
- 示警
当文件句柄无法分配有效的文件指针时,它只会使用警告函数打印警告消息并继续运行。
例子 :# Initializing filename $filename = 'GFG.txt'; # Opening a file and reading content if(open(fh, '<', $filename)) { while(
) { print $_; } } # Executes if file not found else { warn "Couldn't Open a file $filename"; } 输出: