我想寫一個在windows和linux下工作的應用程序。但我有一個路徑問題,因爲Windows使用「\」和Linux使用「/」。我可以解決這個問題。 感謝Ruby中的斜槓和反斜槓
回答
在Ruby中,有在Linux或Windows路徑之間沒有什麼區別。不管環境如何,路徑應該使用/
。因此,要在Windows中使用任何路徑,請將所有\
替換爲/
。 File#join
將適用於Windows和Linux。例如,在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"
哦,如果這隻在你想運行外部命令時才起作用。 – Automatico
...不正確,在窗口中有特殊的前綴,比如\\?\(路徑需要> 260bytes),它被轉換爲//?/根本沒有任何意義......所以這個特性確實是一個bug代碼 – estani
@estani我沒有說這是一個功能。我說'File.join'事實上所有路徑都由'/'分隔,無論環境如何。這就是如何在ruby中表示路徑,並且在初始化文件時,即使在Windows的情況下也需要使用'/'作爲文件路徑。 – rubyprince
使用Pathname
類來生成,然後將是正確的您的系統上的路徑:
a_path = Pathname.new("a_path_goes_here")
這樣做的好處是,它可以讓你鏈目錄由使用+
操作:
a_path + "another_path" + "and another"
調用然後a_path.to_s
會爲你是在系統的正確路徑。
不要忘記需要「路徑名」,除非你運行在一個巨大的web開發框架上。 –
這不適用於Windows 2.0上的Ruby 2.0.0,除非我丟失了一些東西: p = Pathname.new(「」) p = p +「apple」+「banana」 puts p.to_s < - 「apple/banana」 –
改爲使用File.join,它比路徑名更簡單,也更少煩人 - 它會工作得很好。 – shevy
只要紅寶石做的工作,/
路徑名是在Windows
一次OK,你必須發送路徑一些其他程序使用,特別是在命令行或類似文件上傳的東西在瀏覽器中,您必須在Windows中運行時將斜槓轉換爲反斜槓。
C:/projects/a_project/some_file.rb'.gsub('/', '\\')
作品魅力。 (這應該是一個雙反斜槓 - 這個編輯器甚至在單引號中認爲它是一種逃避)。
在將路徑名字符串發送出Ruby控件之前,使用類似的方法。
您將必須確保您的程序知道它正在運行的操作系統,以便它可以決定何時需要此操作系統。一種方法是在程序運行開始時設定一定的,像這樣
::USING_WINDOWS = !!((RUBY_PLATFORM =~ /(win|w)(32|64)$/) || (RUBY_PLATFORM=~ /mswin|mingw/))
(我知道這工作,但我沒寫,所以我不明白的雙重爆炸.. )
我相信'!!'將它轉換爲布爾值。在ruby中,true通常作爲非零或非錯誤對象返回(您會在您的案例中獲得一個Match對象)。 '!'將對象轉換爲'false',第二個'!'將它轉換爲'true'。 –
是的,它很煩人,因爲windows用戶不斷將這些反斜槓替換爲斜槓,反之亦然,如果您需要將路徑複製到您的文件管理器,那麼我就像他一樣。 如果你在Linux或Mac上,它並沒有什麼壞處,並且可以在Windows中節省大量的麻煩。
path = 'I:\ebooks\dutch\_verdelen\Komma'.gsub(/\\/,'/')
Dir.glob("#{path}/**/*.epub").each do |file|
puts file
end
- 1. 正斜槓更改爲反斜槓和正斜槓
- 2. 蟒蛇代替反斜槓反斜槓
- 3. 正斜槓替換爲反斜槓
- 4. PHP如正斜槓反斜槓?
- 5. 斜槓或反斜槓文化援助
- 6. 反斜槓
- 7. 用JavaScript中的雙反斜槓替換單個反斜槓
- 8. 用Emacs中的單個反斜槓替換雙反斜槓
- 9. 斜槓散列斜槓
- 10. 針對Windows和Mac的Node.js - 正斜槓,反斜槓糾正
- 11. 使preg_split反斜槓
- 12. 擺脫反斜槓
- 13. 反斜槓問題
- 14. 刪除反斜槓
- 15. PHP json_decode反斜槓
- 16. 反斜槓「\」轉義
- 17. 手柄反斜槓
- 18. 替換反斜槓
- 19. 反斜槓在JavaScript
- 20. 用兩個反斜槓替換反斜槓的Apache Velocity
- 21. 反斜槓中的RegularExpressionValidator
- 22. java中的反斜槓
- 23. newb問題 - 正斜槓和反斜槓grr
- 24. String.replaceAll單反斜線與雙反斜槓
- 25. 使用.htaccess以正斜槓替換URL中的反斜槓
- 26. 如何用雙反斜槓替換反斜槓?
- 27. 用雙反斜槓「\\」替換單個反斜槓「\\」
- 28. 如何用單個反斜槓替換雙反斜槓
- 29. Weebly在反斜槓前插入反斜槓
- 30. 用單個反斜槓代替雙反斜槓
它似乎「加入」的方法是爲Linux T如何使用連接方法的Windows? –
根據您的平臺'File.join'將使用\或/作爲分隔符。 – Wukerplank
實際上'File.join'也在Windows上使用'/'。 – dubek