人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Perlでファイルサイズを取得する方法を教えてください。

Windows上でPerlスクリプトを実行しています。
ファイルのサイズを取得するのに
$fsize = -s $filename;
としてファイルサイズを取得していますが、これではファイルのプロパティの「サイズ」項しか分かりません。

「ディスク上のサイズ」を取得したいのですが、その方法を教えてください。

●質問者: harrypotter
●カテゴリ:コンピュータ
✍キーワード:Perl Windows サイズ スクリプト ディスク
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● るびきち
●10ポイント

ブロックサイズじゃだめですか?

@a = stat "/r/.skk-jisyo";
$blocks = $a[12];
print "blocks=$blocks\n";

http://www.ksknet.net/perl/stat_1.html

◎質問者からの返答

回答ありがとうございます。

残念ながらWindowsではブロック数もブロックサイズも取得できません。


2 ● kn1967
●15ポイント
$filename = 'a.txt';
open(IN, "dir /v $filename |");
while (<IN>) {
 if(/.+\s+.+\s+\d+\s+([0-9,]+).+$filename/){
 print $1;
 }
}
close(IN);

エラートラップなどは適宜仕込んでください。

◎質問者からの返答

回答ありがとうございます。

/vのオプションが無効なスイッチとしてエラーになるのですが、何のオプションでしょうか?


3 ● MAS3
●200ポイント ベストアンサー

クラスタサイズから逆算すれば取れると思います。

use strict;
use warnings;

my $filename = 'test.txt';
my $filesize = -s $filename;

print $filesize, "\n";
print get_disk_filesize($filesize), "\n";

sub get_disk_filesize {
 my $size = shift;
 my $cluster_size = 4096; # クラスタサイズ
 
 my $disk_filesize = (int(($size-1) / $cluster_size) + 1) * $cluster_size;
 return $disk_filesize;
}

クラスタサイズの取り方が分からなかったので4,096バイト固定にしています。

何らかの手段でクラスタサイズをちゃんと取得するか、1バイトのファイルを

作ってサイズを確認するというのが確実だと思います。

参考

FAT および NTFS のデフォルトのクラスタ サイズ

http://support.microsoft.com/default.aspx?scid=kb%3bja%3b140365

◎質問者からの返答

回答ありがとうございます。

明日試してみます。

ちなみにストレージはDataONTAPでCIFSを使っています。

完璧です。

ありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ