Quiero escribir una aplicación que funcione en Windows y Linux. pero tengo un problema de ruta porque Windows usa "\" y Linux usa "/". ¿Cómo puedo resolver este problema? graciasbarra diagonal y barra invertida en Ruby
Respuesta
Echa un vistazo a File.join: http://www.ruby-doc.org/core/classes/File.html#M000031
En Ruby, no hay diferencia entre los caminos en Linux o Windows. La ruta debe estar usando /
independientemente del entorno. Por lo tanto, para usar cualquier ruta en Windows, reemplace todo \
con /
. File#join
funcionará para Windows y Linux. Por ejemplo, en Windows:
Dir.pwd
=> "C/Documents and Settings/Users/prince"
File.open(Dir.pwd + "/Desktop/file.txt", "r")
=> #<File...>
File.open(File.join(Dir.pwd, "Desktop", "file.txt"), "r")
=> #<File...>
File.join(Dir.pwd, "Desktop", "file.txt")
=> "C/Documents and Settings/Users/prince/Desktop/file.txt"
Ohh si esto solo funcionó cuando desea ejecutar comandos externos. – Automatico
... no es cierto, en las ventanas hay prefijos especiales como \\? \ (Requerido para rutas> 260bytes) que se convierten a //?/Que no tienen ningún significado ... Así que la función es de hecho un bug afaict – estani
@estani No he dicho que sea una característica. Dije 'File.join' y de hecho todas las rutas están separadas por'/'independientemente del entorno.Así es como se representan los caminos en ruby y tiene que usar '/' incluso en el caso de Windows para rutas de archivos al inicializar un archivo. – rubyprince
Utilice la clase Pathname
para generar caminos que luego será correcta en su sistema:
a_path = Pathname.new("a_path_goes_here")
El beneficio de esto es que le permitirá a los directorios de la cadena de utilizando el operador +
:
a_path + "another_path" + "and another"
Calling a_path.to_s
generará entonces el camino correcto para el sistema que se encuentra.
No olvides requerir "nombre de ruta" a menos que estés ejecutando en un marco de desarrollo web descomunal. –
Esto no funciona para Ruby 2.0.0 en Windows a menos que me falta algo: p = Pathname.new ("") p = p + "apple" + "banana" puts p.to_s <- "apple/banana" –
Use File.join en su lugar, es más simple y menos molesto que pathname, y funcionará perfectamente. – shevy
Mientras Rubí está haciendo el trabajo, /
en los nombres de ruta está bien en Windows
Una vez que usted tiene que enviar un camino para algún otro programa para utilizar, sobre todo en una línea de comandos o algo así como una carga de archivos en un navegador, debe convertir las barras diagonales en barras invertidas cuando se ejecuta en Windows.
C:/projects/a_project/some_file.rb'.gsub('/', '\\')
trabaja a charm. (Se supone que es una doble barra diagonal inversa: este editor lo ve como un escape incluso en comillas simples).
Use algo como esto justo antes de enviar la cadena para el nombre de la ruta fuera del control de Ruby.
Deberá asegurarse de que su programa sepa en qué sistema operativo se está ejecutando para que pueda decidir cuándo es necesario. Una forma es establecer una constante en el comienzo de la ejecución del programa, algo como esto
::USING_WINDOWS = !!((RUBY_PLATFORM =~ /(win|w)(32|64)$/) || (RUBY_PLATFORM=~ /mswin|mingw/))
(Sé que esto funciona, pero no escribí, así que no entiendo la doble explosión .. .)
Creo que '!!' lo convierte en un booleano. En ruby true generalmente se devuelve como objetos no nulos o no falsos (obtendría un objeto Match en su caso). '!' convierte el objeto en 'falso' y el segundo'! 'lo convierte en' true'. –
Sí, es molesto que los usuarios de Windows sigan reemplazando esas barras invertidas por barras diagonales y viceversa si necesita la ruta para copiarlo a su administrador de archivos, así que lo hago como el suyo. No hace daño si está en Linux o Mac y ahorra muchas molestias en Windows.
path = 'I:\ebooks\dutch\_verdelen\Komma'.gsub(/\\/,'/')
Dir.glob("#{path}/**/*.epub").each do |file|
puts file
end
- 1. expresión regular y barra diagonal
- 2. ¿Cómo se genera una ruta de directorio con separadores de doble barra invertida o barra diagonal?
- 3. Escapar barra diagonal en Jackson
- 4. Convertir barra inclinada hacia atrás en barra diagonal en python
- 5. Por favor, enséñame una buena mnemotécnica para recordar "barra diagonal" vs. "barra diagonal inversa"
- 6. partido Regex estrella barra invertida
- 7. Cadenas de Python raw y barra diagonal inversa
- 8. Cómo imprimir una barra diagonal inversa en LaTeX
- 9. Escape de barra invertida en cadena - Javascript
- 10. ¿Qué significa la barra diagonal en javascript?
- 11. URL dividida en la barra diagonal final
- 12. ¿Cómo reemplazar la barra diagonal inversa con doble barra diagonal inversa?
- 13. ¿Qué significa realmente la barra invertida "\"?
- 14. Delimitador cero de barra invertida '\ 0'
- 15. Cómo incluir una barra diagonal en vi buscar y reemplazar
- 16. Python cómo sustituir barra invertida con re.sub()
- 17. Solr Query no analiza la barra diagonal
- 18. barra diagonal excepto dentro de los corchetes
- 19. ¿Cómo generar enlaces con barra diagonal en Rails 3?
- 20. Symfony2: URLs con barra diagonal y un parámetro opcional
- 21. Operador de MySQL LIKE con comodín y barra diagonal inversa
- 22. diferentes comportamientos de tratamiento de \ (barra invertida) en la url por Firefox y Chrome
- 23. Cómo agregar una barra invertida en una cadena en java
- 24. ¿Qué hace una \ (barra invertida) en PHP (5.3+)?
- 25. usando la barra invertida en Python (no para escapar)
- 26. Reemplazo de la barra invertida en una cadena
- 27. Búsqueda de carácter de barra invertida en vim
- 28. ¿Cómo se hace una cadena en PHP con una barra invertida en ella?
- 29. Reemplazar el carácter "/" de barra diagonal en cadena de JavaScript?
- 30. ASP.NET MVC + IIS7 + FireFox: barra diagonal en la URL
Parece que el método "join" es para linux T ¿Cómo puedo usar el método join para windows? –
Dependiendo de su plataforma 'File.join' usará \ o/como separador. – Wukerplank
En realidad 'File.join' también utiliza'/'en Windows. – dubek