如何在Ruby中安全地连接路径名?

234

我的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

如何正确处理这两种情况?

2个回答

397

我建议使用File.join

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

58

需要注意的一点是,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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接