お題
- 下記のファイルの容量(バイト数)を求めよ
- できたらwcコマンドを使い容量が合っているかチェックすること
sample.rb
sample sample sample sample sample
回答
file = 'sample.rb' p File::Stat.new(file).size => 34
wcコマンドの-c
オプションを使い、容量のみをチェックしてみる。
wc -c sample.rb
結果
34 sample.rb
どちらも34が表示され、容量を正しく取得できたと見られる。
説明
まず読み込むファイルを取得する。
file = 'sample.rb'
こんなふうにも書ける。
file = './sample.rb'
個人的にはこちらのほうがしっくりくる。./
は「現在のディレクトリ」という意味。
次に、Fileクラスのstatを使い、ファイル情報を取得する。
File::Stat.new(file)
ちなみにこれをpメソッドで出力させるとファイルの情報たちがでてくる。
["dev=0x1000004", "ino=25103879", "mode=0100644", "nlink=1", "uid=501", "gid=20", "rdev=0x0", "size=34", "blksize=4096", "blocks=8", "atime=2019-12-10 09:34:39 +0900", "mtime=2019-12-10 09:31:58 +0900", "ctime=2019-12-10 09:31:58 +0900", "birthtime=2019-12-03 09:30:39 +0900"]
(本当は配列では表示されないがここでは見やすくしている)
この中にsize
があり、34と記載されている。
これを取り出せばOK。
File::Stat.new(file).size
反省
最初は次のようにバイトサイズを取り出そうとしていた。
file.bytesize
しかし、これは
=> 9
といった結果になる。
つまり、'sample.rb'
という文字列に対してのバイトサイズを表示してしまっている。