Обновление файла с произвольным доступом

Проблема

Требуется прочитать старую запись из двоичного файла, изменить ее содержимое и записать обратно.

Решение

Прочитайте (read) старую запись, упакуйте (pack) обновленное содержимое и запишите обратно.
use Fcntl;       #  Для SEEK_SET и SEEK_CUR
$ADDRESS = $RECSIZE * $RECNO;
seek(FH, $ADDRESS, SEEK_SET) or die "Seeking: $!";
read(FH, $BUFFER, $RECSIZE) == $RECSIZE
                               or die "Reading: $!";
@FIELDS = unpack($FORMAT, $BUFFER);
# Обновить содержимое, затем
$BUFFER = pack($FORMAT, @FIELDS);
seek(FH, -$RECSIZE, SEEK_CUR) or die "Seeking: $!";
print FH $BUFFER;
close FH or die "Closing: $!";

Комментарий

Для вывода записей в Perl не потребуется ничего, кроме функции print. Помните, что антиподом read является print, а не write, хотя, как ни странно, антиподом sysread все же является syswrite.

См. также

Описание функций open, seek, read, pack и unpack



2013-09-10 17:05:19

Proverte kod v komentariyah gde pro list tam oshibki detskie




Оставить комментарий:
Ваше Имя:
Email:
Антибот: *  
Ваш комментарий: