簡體   English   中英

如何在Perl程序中復制二進制文件

[英]How to copy binary files in Perl program

我有以下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模塊解決這個問題,任何示例代碼剪輯都會很有用。

謝謝。

-廣告

始終使用三arg 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: $!";

在兩個文件句柄上調用binmode

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM