Chcę napisać aplikację działającą w systemie Windows i Linux. ale mam problem ze ścieżką, ponieważ Windows używa "\" i Linux używa "/". jak mogę rozwiązać ten problem. dziękiUkośnik i ukośnik w Ruby
Odpowiedz
Spójrz na File.join: http://www.ruby-doc.org/core/classes/File.html#M000031
W Ruby, nie ma różnicy między ścieżkami w systemie Linux lub Windows. Ścieżka powinna używać /
niezależnie od środowiska. Tak więc, aby użyć dowolnej ścieżki w systemie Windows, zamień wszystkie \
na . File#join
będzie działać zarówno w systemie Windows, jak i Linux. Na przykład w systemie 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, jeśli działa to tylko wtedy, gdy chcesz uruchomić zewnętrzne polecenia. – Automatico
... nie jest prawdą, w oknach istnieją specjalne przedrostki takie jak \\? \ (Wymagane dla ścieżek> 260 bajtów), które są konwertowane na //?/Które nie mają żadnego znaczenia ... Tak więc funkcja jest rzeczywiście błędna afaict – estani
@estani Nie powiedziałem, że jest to funkcja. Powiedziałem 'File.join' i infact, że wszystkie ścieżki są oddzielone przez'/'niezależnie od środowiska.W ten sposób ścieżki są reprezentowane w ruby i musisz używać '/' nawet w przypadku systemu Windows do ścieżek plików podczas inicjowania pliku. – rubyprince
użyć klasy Pathname
do generowania ścieżek, które następnie będą poprawne w systemie:
a_path = Pathname.new("a_path_goes_here")
Korzyść z tego jest to, że pozwalają na katalogach łańcucha przez za pomocą operatora +
:
a_path + "another_path" + "and another"
Wywołanie a_path.to_s
następnie wygenerować poprawną ścieżkę dla systemu, że jesteś na.
Nie zapomnij wymagać "nazwy ścieżki", chyba że używasz gigantycznego środowiska programistycznego. –
To nie działa dla Ruby 2.0.0 na Windowsie, chyba że czegoś mi brakuje: p = Pathname.new ("") p = p + "jabłko" + "banan" stawia p.to_s <- "apple/banana" –
Zamiast tego użyj File.join, jest to prostsze i mniej irytujące niż ścieżka - i będzie działało dobrze. – shevy
Dopóki Ruby jest wykonywanie pracy, /
w nazwach ścieżek jest ok na Windows
Kiedy trzeba wysłać ścieżkę jakiś inny program do wykorzystania, szczególnie w linii poleceń lub coś w rodzaju wysyłania plików w przeglądarce, musisz przekonwertować ukośniki na ukośniki odwrotne podczas pracy w systemie Windows.
C:/projects/a_project/some_file.rb'.gsub('/', '\\')
działa urok. (To ma być podwójny ukośnik odwrotny - edytor traktuje to jako ucieczkę nawet w pojedynczych cudzysłowach).
Użyj czegoś podobnego tuż przed wysłaniem ciągu znaków, aby nazwa ścieżki nie była kontrolowana przez Ruby.
Musisz upewnić się, że twój program wie, w jakim systemie działa, aby mógł zdecydować, kiedy to będzie potrzebne. Jednym ze sposobów jest ustawić stałą na początku przebiegu programu, coś jak ten
::USING_WINDOWS = !!((RUBY_PLATFORM =~ /(win|w)(32|64)$/) || (RUBY_PLATFORM=~ /mswin|mingw/))
(wiem, że to działa, ale ja nie napisałem, że tak nie rozumiem podwójne huk .. .)
Wierzę, że '!!' zamienia go na wartość logiczną. W ruby true zwykle zwracane są obiekty niezerowe lub niefałszowane (w twoim przypadku otrzymasz obiekt Match). '!' konwertuje obiekt na 'false', a drugi'! 'zamienia go na' true'. –
Tak, denerwujące jest to, że użytkownicy systemu Windows nadal zamieniają ukośniki na ukośniki i na odwrót, jeśli potrzebujesz ścieżki do skopiowania do menedżera plików, więc robię to tak jak on. Nie szkodzi, jeśli korzystasz z systemu Linux lub Mac i oszczędza wiele niedogodności w oknach.
- 1. Ucieczka ukośnik w Jackson
- 2. Uciekający ukośnik w Swift
- 3. Pokaż ukośnik w haml?
- 4. Usuń początkowy i końcowy ukośnik/
- 5. Perl Dancer ciągnący ukośnik
- 6. json_encode() ucieczki ukośnik
- 7. Wyrażenie regularne i ukośnik w przód
- 8. Wyszukaj i zamień na ukośnik w przód
- 9. /(ukośnik) w CSS deklaracji stylu
- 10. Ukośnik naprzód w regex Python
- 11. Ukośnik naprzód w nazwie klasy
- 12. Adresy URL małych liter i końcowy ukośnik
- 13. nginx i końcowe ukośnik z proxy przekazać
- 14. niszczące ukośnik, nie non-breaking
- 15. Podziel ciąg na ukośnik w przód
- 16. Usuń odwrotny ukośnik („\”) w Objective-C
- 17. Jak napisać ukośnik odwrotny (\) w ciągu znaków?
- 18. Jak podzielić ciąg na ukośnik w bash
- 19. Jak zamienić ukośnik w przód ukośnikiem
- 20. Co oznacza ukośnik odwrotny w TCL?
- 21. Co oznacza podwójny ukośnik odwrotny \\ w Haskell?
- 22. Uciekający ukośnik odwrotny w SQL Server GRANT
- 23. Funkcja InetAddress.toString() zwraca ukośnik w przód
- 24. os.path.join() i os.path.normpath() dodają podwójny ukośnik w oknach
- 25. Jak dodać ukośnik w vi szukaj i zamień
- 26. Rubinowy ukośnik odwrotny, aby kontynuować ciąg w nowej linii?
- 27. Jak utworzyć opcjonalny ukośnik slash z webapp2?
- 28. Zamień ukośnik odwrotny z podwójnym ukośnikiem odwrotnym
- 29. Ignoruj spływu ukośnik z Apache Rewrite
- 30. backbone.js: końcowe ukośnik na końcu trasy url
Wydaje się, że metoda "dołączania" jest dla systemu Linux T Jak używać metody łączenia dla okien? –
W zależności od twojej formy 'File.join' użyje \ lub/as separatora. – Wukerplank
Właściwie 'File.join' używa'/'również w Windows. – dubek