Я использую JRuby
в SikuliX IDE
, чтобы рекурсивно получить список папок и их подпапок и сохранить его абсолютные пути (которые могут также содержать символы с точками) в массиве. Я пробовал использовать следующий код:
records = Dir.glob 'C:/_private/Files/**/*/'
Я получил сообщение об ошибке:
[error] SyntaxError ( invalid multibyte char (UTF-8) )
Ожидаемый результат:
C:/_private/Files/dir1
C:/_private/Files/dir1/subdir1
C:/_private/Files/dir1/subdir2
C:/_private/Files/dir2
C:/_private/Files/dir2/subdir1
C:/_private/Files/dir2/subdir2
@Kandy: Проблема в абсолютном пути, но я не уверен, как мне ее избежать.
в какой операционной системе вы работаете
@Kandy: Я использую его в Windows.
не могли бы вы предоставить еще код, чтобы я посмотрел, что на самом деле происходит. Я установил рубин в свою систему
@ Канди: Я просто использую его в цикле: records.each do |item|
Не могли бы вы включить в свой пример имена каталогов, которые вы ожидаете получить? Это позволит любому, кто ответит на этот вопрос, воссоздать ваш пример и вашу ошибку.
@anothermh: я добавил ожидаемый результат.
Я думаю, вы ищете только папки, поэтому я опубликовал ответ ниже, проверьте
пожалуйста, проверьте новые вещи, которые дают ожидаемый результат -
records = Dir.glob('/E:/ISSUE_Folder/**/*.*')
records.each do |item|
puts File.dirname(item)
end
Как вы видите, он идет в каждую папку и подпапку
Это не работает, если в пути есть символы с точками, и в первую очередь мне нужен только полный путь к подкаталогам.
Пунктирный означает, что вы можете отправить свой путь
Я не могу вас понять. Просто отредактируйте еще немного кода в своем вопросе, чтобы я мог воспроизвести вашу ошибку на своей стороне.
Я редактировал вопрос. Проблема с вашим выводом в том, что нужны только подпапки, файлы - нет, но он должен работать рекурсивно, чтобы получить все подпапки.
@plaidshirt Я отредактировал свой ответ и надеюсь, что он соответствует вашим требованиям.
Я добавил пример ожидаемого результата к вопросу. Мне нужны имена вложенных папок, а не имена файлов.
В моем приложении rails есть папка config
и количество файлов и подпапок, поэтому получаются только папки в config
,
Я использовал ap
ниже предоставленный драгоценным камнем awesome_print
> ap Dir.glob "#{Rails.root}/config/**/"
[
[0] "/home/ray/projects/example_app/config/",
[1] "/home/ray/projects/example_app/config/initializers/",
[2] "/home/ray/projects/example_app/config/locales/",
[3] "/home/ray/projects/example_app/config/environments/"
]
У меня есть папка test
внутри config/locales/
, она также получается по следующему запросу.
> ap Dir.glob "#{Rails.root}/config/**/**/"
[
[0] "/home/ray/projects/example_app/config/",
[1] "/home/ray/projects/example_app/config/initializers/",
[2] "/home/ray/projects/example_app/config/locales/",
[3] "/home/ray/projects/example_app/config/locales/test/",
[4] "/home/ray/projects/example_app/config/environments/"
]
Для дальнейшего поиска подпапок на третьем уровне иерархии я буду использовать "#{Rails.root}/config/**/**/**/"
.
Обновлять:
Вы можете попробовать следующее для окна,
irb(main):022:0> Dir.glob("D:/sd/*/") # first hierarchy
=> ["D:/sd/df/", "D:/sd/dff/"]
irb(main):023:0> Dir.glob("D:/sd/*")
=> ["D:/sd/351px-Nvidia_logo.png", "D:/sd/df", "D:/sd/dff"]
irb(main):024:0> Dir.glob("D:/sd/*/*/") # second hierarchy
=> ["D:/sd/dff/ty/"]
irb(main):025:0> Dir.glob("D:/sd/*/*")
=> ["D:/sd/df/351px-Nvidia_logo2.png", "D:/sd/dff/ty"]
Вы можете дополнительно получить результат, добавив подпапки первой и второй иерархии (прокомментировано выше).
Спасибо, но как я могу использовать абсолютный путь в Windows? Обозначение C: / кажется недействительным.
@plaidshirt Проверил в windows, проверьте, работает ли.
Возможно, ваш JRuby использует меньше или равно Ruby 1.9
В Ruby 1.9 заголовок вашего файла должен указывать формат кодировки.
Добавьте эту строку вверху
# encoding: UTF-8
Посмотрите этот URL, может он вам поможет stackoverflow.com/questions/17859530/…. Также позволь мне