Pregunta

Estoy intentando acceder a una ruta de red en mi script de rubí en una plataforma Windows en un formato como este.

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

Ahora Si trato de utilizar esto como un camino, no va a funcionar. barra invertidas no se escaparon adecuadamente para este script.

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

He intentado todo lo que podía pensar para escapar adecuadamente barras en el camino. Sin embargo no puedo escapar de esa sola barra invertida - debido a su significado especial. Probé comillas simples, comillas dobles, escapando backslash sí mismo, el uso de citas alternativos, tales como% Q {} o% q {}, utilizando ascii a la conversión Char. Nada funciona en un sentido que no estoy haciendo las cosas bien. :-) En este momento la solución temporal es asignar una unidad de red N: \ apuntando a esa ruta y acceder a ella de esa manera, pero eso no es una solución

.

¿Alguien tiene alguna idea de cómo escapar correctamente barra invertidas?

Gracias

¿Fue útil?

Solución

Basta con hacer doble cada barra invertida, así:

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

Otros consejos

Probar

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

Mientras estás usando comillas simples para definir la cadena (por ejemplo., 'foo'), no necesita ser escapado un solo \. excepto en los siguientes dos casos

  1. \\ trabaja a sí mismo a un solo \. Así, \\\\ le dará la \\ partir necesita.
  2. El \ arrastra al final de su trayecto se trata de escapar de la cotización de cierre por lo que necesita un \\ allí también.

Alternativamente,

Se podría definir un ayudante elegante para usted mismo. En lugar de utilizar los separadores de ruta \ torpe, podría utilizar / en conjunción con un método como este:

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

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

Sweet!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top