Ruby フォルダ取得 サンプル | いまのままぢゃダメだ! ・・たぶん。

Ruby フォルダ取得 サンプル

前回の話題の続きになります。

HTML5のFileAPIを使用して、ブラウザから ローカルディスクのフォルダ構造を取得するのは、
まぁ時期尚早かとおもったのですが(と言っても、あのあと作っちゃったのデスが(笑))

Rubyで作ってみました。

変数 foldername に入れたディレクトリ以下のフォルダを全部取得して、ファイルに出力します。
出力するファイルの場所やファイル名は、変数 fname で指定することにします。
ファイル名の後半には、日時情報を付けることとしました。

Find.find(foldername) の一文で、ファイルとフォルダの情報を一括で取得してしまいます。
サブフォルダも含めてすべて一括です。

なので、メモリも大量に使っているようです。 ・・ね (てへぺろ)

そして、処理時間もケッコかかってますので ・・いろいろ改善の余地ありです。(笑)

#! ruby -Ks
# Encoding:Shift_JIS


require 'find'

def wfolder(fn,str)
  open(fn,"a") {|f| f.print str+"\n" }
end

foldername = "c:/Users/****/****/"   # 取得したいディレクトリを指定。その配下のフォルダをすべて取得します。

t = Time.now
fname = "c:/Users/****/Desktop/list_" + t.strftime("%Y-%m-%d(%H-%M-%S).txt")  # 取得したフォルダをファイルに書き出します。


numfolder = 0
numerror = 0

Find.find(foldername) {|fff|

  begin
    if File::ftype(fff) == "directory"
      numfolder += 1                         # 取得したものが フォルダであった場合に出力します。
      wfolder(fname,fff)
#      print fff,"\n"
    else                                         # 取得したものが ファイルであった場合 何もしません。
#  print "File:",fff,"\n"                      # ファイルも出力したい時は ここのprint文を有効にしてください。
    end
  rescue => ex                                # フォルダやファイル名が文字化け等のときエラーになります。
#    print ex,"\n"                             # 文字化けしたのが どのあたりか知りたい時は、ここを有効にしてください。
#    wfolder(fname,ex)
    numerror += 1
    next
  end
}

wfolder(fname,"全フォルダ数(有効数):"+numfolder.to_s+"\n")  # 最後にフォルダ数などを出力します。
wfolder(fname,"全エラー数 :"+numerror.to_s+"\n")

print "全フォルダ数(有効数):",numfolder,"\n"
print "全エラー数 :",numerror,"\n"