Rất giống với Changing one byte in a file in C, nhưng trong Perl thay vì C.Làm cách nào để mở tệp nhị phân trong Perl, chỉ thay đổi byte đầu tiên và ghi lại?
Làm cách nào để mở tệp nhị phân trong Perl, chỉ thay đổi byte đầu tiên và ghi lại?
Rất giống với Changing one byte in a file in C, nhưng trong Perl thay vì C.Làm cách nào để mở tệp nhị phân trong Perl, chỉ thay đổi byte đầu tiên và ghi lại?
Làm cách nào để mở tệp nhị phân trong Perl, chỉ thay đổi byte đầu tiên và ghi lại?
open my $fh, '+<', $file or die "open failed: $!\n";
my $byte;
sysread($fh, $byte, 1) == 1 or die "read failed: $!\n";
seek($fh, 0, 0);
syswrite($fh, $new_byte) == 1 or die "write failed: $!\n";
close $fh or die "close failed: $!\n";
Nhiều cách để thực hiện. Một cách hiệu quả là mở tệp ở chế độ truy cập ngẫu nhiên với open $fh, '+<'
:
my $first_byte = chr(14); # or whatever you want the first byte to be
open my $fh, '+<', $the_file;
seek $fh, 0, 0; # optional - cursor is originally set to 0
print $fh $first_byte; # could also use write or syswrite functions
close $fh;
Cảm ơn bạn đã giải thích những gì ''+ <'' làm - Tôi ước tôi có thể kiểm tra nhiều giải pháp. – jnylen
Bạn đang thiếu một ''' trên dòng syswrite, nhưng có vẻ như điều này sẽ đúng (chết) trên các tệp zero-byte. Tôi sẽ không nghĩ về điều đó, cảm ơn – jnylen
@jnylen: cố định, cảm ơn –