#ruby
#ruby
Вопрос:
Я использую
Find.find("c:\test")
для поиска файлов в каталоге. Я просто хочу выполнить поиск в каталоге на этом уровне, поэтому любой каталог внутри c:test поиск не выполняется.
Есть ли другой метод, который я могу использовать?
Спасибо
Ответ №1:
# 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) }
Ответ №2:
Find
prune
метод позволяет пропустить текущий файл или каталог:
Пропускает текущий файл или каталог, перезапуская цикл со следующей записью. Если текущий файл является каталогом, этот каталог не будет вводиться рекурсивно. Значимый только в пределах блока, связанного с Find::find .
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
Ответ №3:
Вы можете использовать Dir.foreach()
, например, для перечисления всех файлов в c:test
Dir.foreach("c:\test") {|x| puts "#{x}" }