2014年05月07日

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"




AD
いいね!した人  |  コメント(1)  |  リブログ(0)

えいめさんの読者になろう

ブログの更新情報が受け取れて、アクセスが簡単になります

最近の画像つき記事
 もっと見る >>

コメント

[コメントをする]

1 ■試した結果

ちなみに。
僕の取りたかったフォルダの数は、6000個強でした。
書き出したファイルの容量は、エクスプローラの表示で、645KB。
かかった時間は、ちゃんとはかってはいないけど、ファイル名のタイムスタンプと
エクスプローラのタイムスタンプを比較すると約30分でした。

コメント投稿

AD

ブログをはじめる

たくさんの芸能人・有名人が
書いているAmebaブログを
無料で簡単にはじめることができます。

公式トップブロガーへ応募

多くの方にご紹介したいブログを
執筆する方を「公式トップブロガー」
として認定しております。

芸能人・有名人ブログを開設

Amebaブログでは、芸能人・有名人ブログを
ご希望される著名人の方/事務所様を
随時募集しております。