我无法使用以下代码将一个文件的内容复制到另一个文件。
open(DATA1, "+>>text.txt") or die "Couldn't open file text.txt, $!";
open(DATA2, "+>>text11.txt") or die "Error $!";
for ($a = 0; $a < 10; $a++) {
print DATA1 "Test Line $a\n"
}
while (<DATA1>) {
print DATA2 "$_";
}
close (DATA1);
close (DATA2);
任何人都可以帮助代码出错吗?
答案 0 :(得分:1)
在尝试从中读取文件之前,您应该seek(DATA1,0,0)
将文件指针移动到开头。
答案 1 :(得分:1)
首先在文件末尾打开文件,然后在&#34; +&gt;&gt;&#34;中打开文件。模式。打印到它会将文件位置保留在文件的末尾。要从文件的开头读取,您需要seek
回到开头:
open(DATA1, "+>>text.txt") or die "Couldn't open file text.txt, $!";
open(DATA2, "+>>text11.txt") or die "Error $!";
for ($a=0; $a<10; $a++){
print DATA1 "Test Line $a\n"}
seek(DATA1, 0,0); # rewind
while(<DATA1>){
print DATA2 "$_";}
close (DATA1);
close (DATA2);
但是,如果您不需要大量处理选项,则可以使用File::Copy
将文件从一个位置复制或移动到另一个位置。它支持文件句柄。
答案 2 :(得分:0)
首先,始终使用严格和警告。
如果您只想将一个文件复制到另一个文件,请使用File::Copy:
use strict;
use warnings;
use feature qw(say);
use File::Copy;
my $file1 = "...";
my $file2 = "...";
copy $file1, $file2 or die qq(Can't copy '$file1' to '$file2');
或者,您可以先打开文件。如果您已经在自己操作文件,这很方便:
use strict;
use warnings;
use autodie;
use feature qw(say);
use File::Copy;
my $file1 = "...";
my $file2 = "...";
open my $fh1, "<", $file1;
open my $fh2, ">", $file2;
copy $fh1, $fh2;
在第二个例子中,我是use autodie
。如果文件操作失败,此 pragma 将强制程序中止。这样,每次打开文件,关闭文件或写入文件后,您都不必继续or die qw(...);
。
use File::Copy
将copy
和move
命令导入Perl。这是标准模块,这意味着您可以使用它而不必担心它是否会在特定系统上运行。