小池啓仁 ヒロヒト応援ブログ By はてな

小池啓仁(コイケヒロヒト)の動画など。

小池啓仁 ヒロヒト応援ブログ By はてな

ファイルのサイズを変更する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関数の方が明示的で良いですね!