ファイルのサイズを変更するtruncate
SQLでは、ロールバック無しにデータを削除するtruncateがありますが、Perlでもデータを削除してファイルのサイズを変更するtruncate関数があります。
truncate関数は、ファイルハンドルだけでなくファイル名指定でもサイズ変更が出来ます。
とりあえず、サンプルです。
◆サンプル
use strict; use warnings; #ファイル作成 open my $fh, '>', 'test.txt' or die "error $!\n"; print $fh '12345678901234567890'; close $fh; #ファイルの内容を読み込む open $fh, '<', 'test.txt' or die "error $!\n"; my $data = <$fh>; print $data, "\n"; close $fh; #ファイルサイズを求める my @file_info = stat("test.txt"); print "ファイルサイズ : $file_info[7]\n"; # truncateにファイルハンドルを使用する open $fh, '+<', 'test.txt' or die "error $!\n"; truncate($fh, 12); # ファイルサイズを12バイトにする $data = <$fh>; print $data, "\n"; close $fh; #truncate後のファイルサイズを求める @file_info = stat("test.txt"); print "truncate後のファイルサイズ : $file_info[7]\n"; # truncateにファイル名を使用する truncate('test.txt', 0); # ファイルサイズを0バイト(空)にする @file_info = stat('test.txt'); print "再度truncate後のファイルサイズ : $file_info[7]\n";
◆実行結果
C:\perltest>perl truncat.pl 12345678901234567890 ファイルサイズ : 20 123456789012 truncate後のファイルサイズ : 12 再度truncate後のファイルサイズ : 0
ファイルを空(サイズゼロ)にするには、open関数でもできますが、truncate関数の方が明示的で良いですね!