Voglio scrivere un'applicazione che funzioni in windows e linux. ma ho un problema di percorso perché Windows usa "\" e Linux usa "/". Come posso risolvere questo problema. graziebarra e barra rovesciata in Ruby
risposta
Date un'occhiata a File.join: http://www.ruby-doc.org/core/classes/File.html#M000031
In Ruby, non v'è alcuna differenza tra i percorsi in Linux o Windows. Il percorso dovrebbe utilizzare /
indipendentemente dall'ambiente. Pertanto, per utilizzare qualsiasi percorso in Windows, sostituire tutto \
con /
. File#join
funzionerà sia per Windows che per Linux. Ad esempio, in 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 se questo ha funzionato solo quando si desidera eseguire comandi esterni. – Automatico
... non vero, in windows ci sono prefissi speciali come \\? \ (Richiesto per i percorsi> 260bytes) che vengono convertiti in //?/Che non hanno alcun significato ... Quindi la funzione è davvero un bug afaict – estani
@estani Non ho detto che è una funzionalità. Ho detto 'File.join' e tutti i percorsi sono separati da/a prescindere dall'ambiente.Ecco come i percorsi sono rappresentati in ruby e devi usare '/' anche in caso di Windows per i percorsi dei file durante l'inizializzazione di un file. – rubyprince
Utilizzare la classe Pathname
per generare percorsi che poi saranno corretti sul sistema:
a_path = Pathname.new("a_path_goes_here")
Il vantaggio di questo è che vi permetterà di directory chain, utilizzando l'operatore di +
:
a_path + "another_path" + "and another"
Calling a_path.to_s
sarà quindi generare il percorso corretto per il sistema che si sta percorrendo.
Non dimenticare di richiedere "pathname" a meno che tu non stia girando su un ginormous framework di sviluppo web. –
Questo non funziona per Ruby 2.0.0 su Windows a meno che manchi qualcosa: p = Pathname.new ("") p = p + "mela" + "banana" mette p.to_s <- "mela/banana" –
Usa File.join invece, è più semplice e meno fastidioso del percorso - e funzionerà perfettamente. – shevy
Finché Rubino sta facendo il lavoro, /
in nomi di percorso è ok su Windows
volta è necessario inviare un percorso per qualche altro programma da utilizzare, soprattutto in una riga di comando o di qualcosa di simile a un caricamento di file in un browser, devi convertire le barre in barre retroverse quando sei in esecuzione in Windows.
C:/projects/a_project/some_file.rb'.gsub('/', '\\')
funziona un fascino. (Questo dovrebbe essere un doppio backslash - questo editor lo vede come una fuga anche tra virgolette singole.)
Utilizzare qualcosa del genere appena prima di inviare la stringa per il nome del percorso fuori dal controllo di Ruby.
È necessario accertarsi che il programma conosca il sistema operativo in uso in modo che possa decidere quando è necessario. Un modo è quello di impostare una costante all'inizio del l'esecuzione del programma, qualcosa di simile
::USING_WINDOWS = !!((RUBY_PLATFORM =~ /(win|w)(32|64)$/) || (RUBY_PLATFORM=~ /mswin|mingw/))
(So che questo funziona, ma non l'ho scritto in modo non capisco il doppio botto .. .)
Credo che il '!!' lo converta in un booleano. In ruby true viene in genere restituito come oggetto non nullo o non falso (nel caso si otterrà un oggetto Match). '!' converte l'oggetto in 'false' e il secondo'! 'lo converte in' true'. –
Sì, è fastidioso come utenti di Windows continuare a sostituire le barre inverse con le barre e viceversa se è necessario il percorso per copiarlo nel filemanager, quindi lo faccio come il suo. Non fa male se si è su Linux o Mac e si risparmia un sacco di fastidi in Windows.
path = 'I:\ebooks\dutch\_verdelen\Komma'.gsub(/\\/,'/')
Dir.glob("#{path}/**/*.epub").each do |file|
puts file
end
- 1. Sostituire la barra rovesciata con doppia barra rovesciata
- 2. python sostituire una singola barra rovesciata con doppia barra rovesciata
- 3. Invio di barra e barra rovesciata con Java
- 4. Come stampare una stringa con una barra rovesciata in Ruby
- 5. R: strsplit su barra rovesciata (\)
- 6. Aggiungi barra rovesciata alla stringa
- 7. Come evitare una barra rovesciata in R?
- 8. Barra rovesciata di escape in Swift
- 9. Sostituzione della barra rovesciata in una stringa
- 10. rimuovere tutto ciò dopo l'ultima barra rovesciata
- 11. Come dividere usando una barra rovesciata
- 12. Percorso completo con doppia barra rovesciata (C#)
- 13. Sostituisci singola barra rovesciata "\" con doppi backslash "\\"
- 14. Barra rovesciata e citazione negli argomenti della riga di comando
- 15. barra rovesciata seguita da un numero in stringhe python
- 16. Espressione regolare per consentire la barra rovesciata in C#
- 17. operazioni sulle stringhe shell di Windows (cambiando barra rovesciata a barra)
- 18. Per favore insegnami un buon mnemonico per ricordare "barra" contro "barra rovesciata"
- 19. Extra barra rovesciata necessaria nel modello regexp di PHP
- 20. Sostituire slash con doppia barra rovesciata racchiusa tra doppi apici
- 21. Combina barra degli strumenti e barra del titolo in Qt
- 22. Come passare percorso con gli spazi e barra rovesciata finale per MSBuild come proprietà
- 23. jQuery: Come evitare le virgolette singole e doppie con barra rovesciata
- 24. Ruby Net :: Barra di avanzamento FTP
- 25. delimitatore non deve essere alfanumerico o barra rovesciata e funzione preg_match
- 26. Come inserire la barra rovesciata seguita da virgoletta singola usando paste0 in R?
- 27. Come si crea una stringa in PHP con una barra rovesciata?
- 28. Come gestire il carattere di barra rovesciata in PowerShell - sostituire le operazioni con le stringhe?
- 29. Come rimuovere la barra rovesciata nella stringa usando regex in Java?
- 30. Perché il carattere percentuale non è sfuggito con la barra rovesciata in C?
Sembra che il metodo "join" sia per linux T Come posso utilizzare il metodo di join per Windows? –
A seconda della vostra piattaforma, 'File.join' userà \ o/come separatore. – Wukerplank
In realtà 'File.join' usa'/'anche su Windows. – dubek