我想编写一个可以在Windows和Linux上运行的应用程序,但是我遇到了路径问题,因为Windows使用“\”而Linux使用“/”。如何解决这个问题。 谢谢
(注:保留原文中的HTML标签)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"
C:/projects/a_project/some_file.rb'.gsub('/', '\\')
。请在将字符串发送到 Ruby 控制以外的地方之前执行此操作,并确保程序了解自己运行的操作系统,以便决定何时需要进行此操作。一个方法是在程序运行开始时设置一个常量:::USING_WINDOWS = !!((RUBY_PLATFORM =~ /(win|w)(32|64)$/) || (RUBY_PLATFORM=~ /mswin|mingw/))
。!!
将其转换为布尔值。在 Ruby 中,true 通常返回为非 nil 或非 false 的对象(在您的情况下,您将获得一个匹配对象)。!
将对象转换为 false
,第二个 !
将其转换为 true
。 - Mr_Moneybags请看File.join函数:http://www.ruby-doc.org/core/classes/File.html#M000031
File.join
在 Windows 上也使用 /
。 - dubek使用Pathname
类生成路径,使其在您的系统上正确:
a_path = Pathname.new("a_path_goes_here")
这样做的好处是可以使用+
运算符链接目录:
a_path + "another_path" + "and another"
a_path.to_s
将会生成适合你所在系统的正确路径。File.join
即使在Windows机器上仍然会使用/
。而Pathname
则会使用操作系统所指定的符号。 - Ryan Bigg/
。底层的Ruby会根据操作系统自动处理/
。 - Sunnypath = 'I:\ebooks\dutch\_verdelen\Komma'.gsub(/\\/,'/')
Dir.glob("#{path}/**/*.epub").each do |file|
puts file
end
File.join
,实际上所有路径都使用/
分隔,无论环境如何。这就是 Ruby 中表示路径的方式,即使在 Windows 系统中初始化文件时,也必须使用/
来表示文件路径。 - rubyprinceseparator = rb_obj_freeze(rb_usascii_str_new2("/"));
这太错误了... - estani"C:/Documents and Settings/Users/prince/Desktop/file.txt"
。 - P.Brian.Mackey