Как мне обратиться к пути UNC в Ruby в Windows? - PullRequest
4 голосов
/ 22 октября 2010

Я пытаюсь получить доступ к общему ресурсу 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

Ответы [ 3 ]

6 голосов
/ 22 октября 2010

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

Dir.entries ('\\\\ 192.168.10.1 \\ share')

6 голосов
/ 03 августа 2013

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
0 голосов
/ 22 октября 2010

Похоже, вам не хватает косой черты.Попробуйте '\\server\share\'

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

...