我想写一个在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. 用Java发送斜杠和反斜杠
- 2. 正斜杠更改为反斜杠和正斜杠
- 3. 蟒蛇代替反斜杠反斜杠
- 4. Ruby用单反斜杠替换双反斜杠
- 5. Rscript和反斜杠
- 6. sed用反斜杠替换正斜杠
- 7. PHP如正斜杠反斜杠?
- 8. 斜杠或反斜杠文化援助
- 9. 如何用斜杠'/'替换反斜杠'\'?
- 10. 正斜杠替换为反斜杠
- 11. 用反斜杠
- 12. 反斜杠
- 13. sed反斜杠
- 14. 用反斜杠
- 15. 如何使用javascript替换正斜杠为反斜杠和正斜杠
- 16. 用JavaScript中的双反斜杠替换单个反斜杠
- 17. 用Emacs中的单个反斜杠替换双反斜杠
- 18. 斜杠散列斜杠
- 19. 反斜杠和正斜杠在Python中混合使用
- 20. UNIX/Windows上的斜杠和反斜杠的一致性
- 21. 在php中使用双反斜杠代替单反斜杠
- 22. 在javascript中转义反斜杠打印两个反斜杠
- 23. 转义单斜杠和双斜杠
- 24. 防止斜杠(/)和反斜杠(\)的属性?
- 25. 针对Windows和Mac的Node.js - 正斜杠,反斜杠纠正
- 26. 反斜杠“\”转义
- 27. Python rstrip反斜杠
- 28. 使preg_split反斜杠
- 29. 回声反斜杠
- 30. PHP preg_replace反斜杠
它似乎“加入”的方法是为Linux T如何使用连接方法的Windows? –
根据您的平台'File.join'将使用\或/作为分隔符。 – Wukerplank
实际上'File.join'也在Windows上使用'/'。 – dubek