2015-05-01 105 views
0

我試圖做一個程序,希望在C:\搜索希望每個目錄,子目錄,子子目錄等。我覺得我可以照顧那部分,但也有文件夾名稱的問題。當我的程序爲多個搜索條件搜索Foo或巨大的if/elsecase語句時,可能會遇到像FOO這樣的文件夾沒有被引用的情況問題。嵌套目錄搜索

我的問題是:1.有沒有辦法忽略字母大小寫?和2.有沒有辦法提高搜索的效率?

我當前的代碼:

#foldersniffer by Touka, ©2015 
base = Dir.entries("C:\\") 
trees = Dir.entries("#{base}") 
trees.each do |tree| 
    if Dir.exist?("Foo") 
     puts "Found Folder \"Foo\" in C:\\" 
    elsif Dir.exist?("Bar") 
     puts "Found Folder \"Bar\" in C:\\" 
    else 
     puts "No folders found" 
    end 
end 
sleep 

任何幫助表示讚賞。

編輯:它試圖掃描像bootmgr這樣的文件,它給我的錯誤...我不知道如何解決這個問題。

+0

現在你的問題是什麼? – Turion

+0

從哪裏找到'scan'方法? –

回答

0

考慮使用Dir.glob(...)和不區分大小寫匹配的正則表達式:

Dir.glob('c:\\**\*') do |filename| 
    if filename =~ /c:\\(foo|bar)($|\\)/i 
    puts "Found #{filename}" 
    end 
end 

案例對於Dir.glob參數的敏感度可能與Windows系統無關:

請注意,此模式不是正則表達式,它更接近殼體glob。有關flags參數的含義,請參閱File.fnmatch。請注意,區分大小寫取決於您的系統(因此File :: FNM_CASEFOLD將被忽略),結果返回的順序也一樣。