对于要下载一个文件来说,有一个必须要考虑的问题就是当前磁盘空间的大小是否够用,以及在下载过程中是否磁盘空间会发生变化导致空间不足。这样现在的下载软件都会在一个文件正式下载前作出判断并预创建一个等大的文件来“占领”磁盘空间。在perl中如何实现这个事情呢?比如创建一个1G大小的文件难道要用for来写入1G个“0”么?那么创建文件的时间无疑有点离谱。其实只要借助seek()函数就可以了。比如建立一个1K大小的文件,可以先创建一个文件,将指针移动到1023,(是的,是1023,因为文件的第一位置是0,这点永远要记得。)然后写入一个0。那么1K大小的文件就创建好了。1G大小的文件也可以通过这种方式来快速创建。
知识点:
seek FILEHANDLE, OFFSET, WHENCE
filehandle : 文件的句柄;
offset : 从当前位置开始的偏移量;
whence : 偏移量开始的位置,0 代表从文件头,1 代表从当前位置,2 代表从文件末尾。
当1或2时,offset的值可以为负值。
* 文件开头的第一个偏移位置是 0 !
#!perl!
#创建一定大小的文件;
use warnings; use strict;
open FH,">","temp"; seek FH,1023,0; print FH "0"; close FH; |
文件的创建与读写是我们最熟悉不过的事了,那就是open()函数。但是你真的了解open()函数么?
以前最常用的是:
读取文件
open FILEHANDLE,"
或 open FILEHANDLE,"filename";
没有文件时创建文件,有同名文件时清空文件并重写;
open FILEHANDLE,">filename";
在文件末尾追加;
open FILEHANDLE,">>filename";
其实除了上面的三种以外还有:
打开文件并读或写(更新文件);
open FILEHANDLE,"+
*注:网上有篇“Perl的经典用法:用Open()函数打开文件”中的说法有误,“+<”并不能创建文件。
打开文件并读或写,文件不存在时创建文件,文件存在时,清空并重写;
open FILEHANDLE,"+>filename";
打开文件并读或写或追加,文件不存在时创建文件,默认在文件末尾追加。
open FILEHANDLE,"+>>filename";
其实上面两部分内容最大的区别在于有没有“+”,“+”意味着在打开文件时可以同时读或写,而没有“+”时,只能读或只能写。
perl-doc中还有如下内容:
In the two-argument (and one-argument) form, opening '<-' or '-' opens STDIN and opening '>-' opens STDOUT.
在双参数模式中,"<-"或"-"打开标准输入,而">-"开启标准输出。
open同样可以开启管道。
|command;
command|;
此外open()函数还支持三参数模型,如下:
open FILEHANDLE,"+>>“,"filename";
其作用在perl-doc中有详细的说明,这里只给出其中的一种用法:
open(my $fh, "<:encoding(UTF-8)", "filename");
open()的用法是很复杂的,这里介绍的也不全面,如果想了解更多就去参考《perl语言编程》或perl-doc吧。
by lanmeibanban
2010-08-13
阅读(1576) | 评论(0) | 转发(0) |