Искать только в текущем каталоге - PullRequest
2 голосов
/ 26 апреля 2011

Я использую

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

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

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

Спасибо

Ответы [ 3 ]

4 голосов
/ 26 апреля 2011
# 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 голосов
/ 26 апреля 2011
Метод

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
0 голосов
/ 26 апреля 2011

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

Dir.foreach("c:\\test")  {|x| puts "#{x}" }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...