如何在ruby中做一个安全的连接路径名?


188

我的Rails开发环境是基于Windows的,而生产环境是基于Linux的。

有可能会使用VirtualHost。假设需要使用来在/public文件夹中引用一个文件名File.open('/tmp/abc.txt', 'r')

-但在Windows中应该是C:\tmp\abc.txt。如何进行正确的路径联接以处理两个不同的环境?

prefix_tmp_path = '/tmp/'
filename = "/#{rand(10)}.txt"

fullname = prefix_tmp_path + filename # /tmp//1.txt <- but I don't want a double //

prefix_tmp_path = "C:\tmp\"我得到C:\tmp\/1.txt

处理这两种情况的正确方法是什么?

Answers:


329

我建议使用File.join

>> File.join("path", "to", "join")
=> "path/to/join"

51

需要注意的一件事。Ruby在包括Windows在内的所有平台上都使用“ /”作为文件分隔符,因此您实际上不需要使用不同的代码将不同平台上的内容连接在一起。“ C:/tmp/1.text”应该可以正常工作。

File.join()是您将路径连接在一起的朋友。

prefix_tmp_path = 'C:/tmp'
filename = "#{rand(10)}.txt"
fullname = File.join(prefix_tmp_path, filename) # e.g., C:/tmp/3.txt
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.