2011-04-26 3 views
2

Im используяИскать в текущей директории только

Find.find("c:\\test") 

для поиска файлов в директории. Я просто хочу найти директорию на этом уровне, так что любой dir внутри c: \ test не будет искать.

Есть ли другой способ, который я могу использовать?

Благодаря

ответ

4
# Temporarily make c:\test your current directory 
Dir.chdir('c:/test') do 
    # Get a list of file names just in this directory as an array of strings 
    Dir['*'].each do |filename| 
    # ... 
    end 
end 

В качестве альтернативы:

# Get a list of paths like "c:/test/foo.txt" 
Dir['c:/test/*'] do |absolute| 
    # Get just the filename, e.g. "foo.txt" 
    filename = File.basename(absolute) 
    # ... 
end 

С обоими вы можете получите только имена файлов в массив, если хотите:

files = Dir.chdir('c:/text'){ Dir['*'] } 
files = Dir['c:/text/*'].map{ |f| File.basename(f) } 
3

Find «s prune метод позволяет пропустить текущий файл или каталог:

Пропускает текущий файл или каталог, перезапутить петлю со следующей записи. Если текущий файл является каталогом , в этом каталоге не будет , который будет рекурсивно введен. Смысл только в блоке, связанном с Найти :: найти.

Find.find("c:\\test") do |path| 
    if FileTest.directory?(path) 
    Find.prune # Don't look any further into this directory. 
    else 
    # path is not a directory, so must be file under c:\\test 
    # do something with file 
    end 
end 
0

Вы можете использовать Dir.foreach(), например, перечислить все файлы в каталоге C: \ тест

Dir.foreach("c:\\test") {|x| puts "#{x}" } 
Смежные вопросы