Как указать путь UNC в Ruby в Windows?

Я пытаюсь получить доступ к общему ресурсу UNC через irb в Windows. В оболочке Windows это будет

\\server\share

Я попытался избежать всех обратных косых черт.

irb(main):016:0> Dir.entries '\\\\server\share'
Errno::ENOENT: No such file or directory - \\server\share

и используя IP-адрес вместо имени

irb(main):017:0> Dir.entries '\\\\192.168.10.1\share'
Errno::ENOENT: No such file or directory - \\192.168.10.1\share

person Sven    schedule 22.10.2010    source источник
comment
По крайней мере, с 1.9.3 вы можете просто использовать косую черту, и вам не нужно беспокоиться об экранировании или чем-то еще Dir['//server/share/*']. Выглядит намного лучше, чем необходимость избегать всех обратных косых черт.   -  person    schedule 07.12.2012
comment


Ответы (3)


Попробуйте заменить '\' другим '\'

Dir.entries('\\\\\\\\192.168.10.1\\\\share')
person ILog    schedule 22.10.2010
comment
О Господи. У меня была опечатка на моем пути... Однако это работает с двойной обратной косой чертой. Спасибо всем... - person Sven; 22.10.2010

Ruby интерпретирует пути в соответствии с POSIX, то есть по возможности следует использовать косую черту.

//server/share

Завершающая косая черта не нужна, как и в родной Windows. Вы можете использовать обратную косую черту, но они должны быть экранированы другой обратной косой чертой.

\\\\server\\share

Я бы рекомендовал это только тогда, когда вы передаете пути UNC из собственных программ напрямую и не можете их преобразовать. Когда я смешиваю пути Ruby/Windows, например, в скрипте сборки, который использует методы Ruby и собственные приложения Windows, для каждого из которых требуются разные пути, я буду использовать несколько помощников:

def windows_path(value)
  value.gsub '/', '\\'
end

def posix_path(value)
  value.gsub '\\', '/'
end

Всегда заключайте свои пути в одинарные кавычки, если они буквальные, или в двойные кавычки, если вы интерполируете. Косая черта указывает Ruby начать интерпретацию регулярного выражения. Это частая ошибка у меня в irb.

irb> File.exists? //server/share
SyntaxError: (irb):2: unknown regexp options - rvr
person Anthony Mastrean    schedule 03.08.2013

Похоже, вы пропустили косую черту в конце. Попробуйте '\\server\share\'

Это похоже на корневой каталог диска Windows. Это C:\, а не C:

person MSalters    schedule 22.10.2010
comment
Не работает и при удвоении обратной косой черты: irb(main):021:0› Dir.entries('\\\\server\\share\\') Errno::ENOENT: Нет такого файла или каталога - \\server \Поделиться\ - person Sven; 22.10.2010