Побег двойных и одиночных обратных косых черт в строке в Ruby

Я пытаюсь получить доступ к сетевому пути в моем ruby ​​ script на платформе Windows в таком формате.

\\servername\some windows share\folder 1\folder2\

Теперь, если я попытаюсь использовать это как путь, это не сработает. Для этого script не выполняются одиночные обратные косые черты.

path = "\\servername\some windows share\folder 1\folder2\"
d = Dir.new(path)

Я пробовал все, что мог подумать, чтобы правильно скрыть следы на пути. Однако я не могу избежать этой единственной обратной косой черты - из-за этого особый смысл. Я пробовал одинарные кавычки, двойные кавычки, избегая обратной косой черты, используя альтернативные кавычки, такие как% Q {} или% q {}, используя ascii для преобразования char. Ничто не работает в некотором смысле, что я не делаю это правильно.:-) В настоящее время временное решение - это сопоставление сетевого диска N: \, указывающего на этот путь и доступ к нему таким образом, но это не решение.

Кто-нибудь знает, как правильно избежать одиночных обратных косых черт?

Спасибо

Ответы

Ответ 1

Просто удвоить каждую обратную косую черту, например:

"\\\\servername\\some windows share\\folder 1\\folder2\\"

Ответ 2

Попробуйте это

puts '\\\\servername\some windows share\folder 1\folder2\\'
#=> \\servername\some windows share\folder 1\folder2\

Пока вы используете одинарные кавычки для определения вашей строки (например, 'foo'), один \ не нужно экранировать. , за исключением следующих двух случаев

  • \\ работает только с одним \. Итак, \\\\ предоставит вам начальный \\.
  • Конечный \ в конце вашего пути попытается избежать закрывающей цитаты, поэтому вам понадобится \\.

В качестве альтернативы,

Вы можете определить для себя элегантный помощник. Вместо использования неуклюжих разделителей путей \ вы можете использовать / в сочетании с таким способом:

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

puts windows_path '//servername/some windows share/folder 1/folder2/'
#=> \\servername\some windows share\folder 1\folder2\

Сладкое!