ファイル情報をハッシュで受け取る

データの受け渡しはハッシュでやった方が楽に感じる。
取得する属性は、ファイル名(絶対パス)・ファイルサイズ・
ファイルタイプ・最終アクセス時刻・最新ファイル状態更新時刻・
最終更新時刻の 6 つ。

def file2hash(file)
  method = %w(ftype size atime mtime ctime)

  file_list = []

  if File.directory?(file)
    file_list = Dir::glob("#{file}/*").dup
  else
    file_list << file
  end

  data = []

  file_list.each {|f|
    fstat = File.stat(f)

    item = {}

    method.each {|m|
      item[m.to_sym] = fstat.send(m)
    }
    item[:name] = File.expand_path(f)

    data << item
  }

  data
end
  • 実行結果

[{:ctime=>Wed, Nov 28 2007 00:43:25 +0900,
:name=>"D:/home/develop/old",
:ftype=>"directory",
:size=>0,
:atime=>Wed, Dec 05 2007 00:35:23 +0900,
:mtime=>Wed, Nov 28 2007 00:43:36 +0900},
{:ctime=>Fri, Apr 06 2007 00:06:32 +0900,
:name=>"D:/home/develop/proxy",
:ftype=>"directory",
:size=>0,
:atime=>Wed, Dec 05 2007 00:35:23 +0900,
:mtime=>Sun, Nov 25 2007 22:04:10 +0900},
{:ctime=>Wed, Nov 28 2007 00:43:48 +0900,
:name=>"D:/home/develop/ruby",
:ftype=>"directory",
:size=>0,
:atime=>Wed, Dec 05 2007 00:53:12 +0900,
:mtime=>Wed, Dec 05 2007 00:53:12 +0900}]