加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何在Perl程序中复制二进制文件

发布时间:2020-12-15 23:27:47 所属栏目:大数据 来源:网络整理
导读:我有以下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 $_
我有以下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 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: $!";

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读