2010-12-02 62 views
4

我有下面的Perl代码来制作我拥有的二进制文件的副本。如何在Perl程序中复制二进制文件

$in = "test_file_binary.exe"; 
$out = "test_out_binary.exe"; 
open(IN,$in) || die "error opening ip file: $!" ; 
open(OUT,">$out") || die "error opening op file: $!" ; 
while(<IN>) 
{ 
#chomp; 
print OUT $_; 
} 
close(IN); 
close(OUT); 

但是这个版本的代码,输出二进制文件比输入的二进制文件的大小较具规模的,因为这个Perl代码似乎0x0A(换行)字符前加一个0X0D(回车)字符输入文件,它不在那里。

如果我使用chomp,那么它将被删除,即使有效的0x0A字符存在,也没有将它们放在输出文件中。

1]如何解决这个问题在上面的代码。

2]我如何使用File :: Copy模块来解决这个问题,任何示例代码片段都会有用。

谢谢。两个文件句柄

〜AD

+0

没有Perl :: Copy。也许你的意思是File :: Copy?文档中应该有足够的例子。 – runrig 2010-12-02 23:39:53

+0

@runrig:是的,错字。编辑它。 – goldenmean 2010-12-03 11:06:49

回答

10

始终使用三参数open

open IN, '<:raw', $in or die "Couldn't open <$in: $!"; 
open OUT, '>:raw', $out or die "Couldn't open >$out: $!"; 

my ($len, $data); 
while ($len = sysread IN, my $data, 4096) { 
    syswrite OUT, $data, $len; 
} 
defined $len or die "Failed reading IN: $!" 

然而,File::Copy是那么好用,我不明白为什么你不会。

use File::Copy; 

copy($in, $out) or die "Copy failed: $!"; 
4

呼叫binmode

+1

这是通过复制文件的极其不方便的方式...为什么不使用FILE :: Copy – 2010-12-02 23:34:09

相关问题