2015-05-01 106 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将被忽略),结果返回的顺序也一样。