Just do IT

思うは招く

Ruby基礎問題100本ノック#9 ファイルの容量(バイト数)を取得する

お題

  • 下記のファイルの容量(バイト数)を求めよ
  • できたら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'という文字列に対してのバイトサイズを表示してしまっている。