如何在ruby中选择斜杠和汇编文件路径?

时间:2015-11-25 21:10:41

标签: ruby

在Windows操作系统中,在文件路径(\)中使用反斜杠c:\mytext.txt。在linux / unix OS中,正斜杠/用于文件路径(/home/mytext.txt)。给定dir路径file_dirfile_name,如何为操作系统找到正确的slash并组装文件路径(操作系统可以是Windows还是Linux)? file_dir + '/' + file namefile_dir + '\' + file_name?什么逃避斜线?

3 个答案:

答案 0 :(得分:8)

使用与操作系统无关的File.join

File.join("my", "dir", "and", "my", "file")
#=> my\dir\and\my\file for Windows
#=> my/dir/and/my/file for unix

答案 1 :(得分:2)

来自IO documentation

  如果可能,Ruby将在不同的操作系统约定之间转换路径名。例如,在Windows系统上,文件名“/gumby/ruby/test.rb”将打开为“\ gumby \ ruby​​ \ test.rb”。在Ruby字符串中指定Windows样式的文件名时,请记住转义反斜杠:

"c:\\gumby\\ruby\\test.rb"

所以,不要为自己做更多工作。使用向前斜线来清除牙齿并删除倾斜牙签综合症串。

如果你需要知道要使用哪个路径分隔符,总是File::ALT_SEPARATOR但是要弄乱它或者直接编写访问它的代码而不是让Ruby做正确的事情是很少需要的。所有正在进行连接和拆分的File方法都已荣誉File::ALT_SEPARATOR

  

[...] File :: ALT_SEPARATOR可用于获取特定于平台的分隔符。

答案 2 :(得分:1)

Ruby使用/作为Windows和Unix系统的路径分隔符:

PS C:\Users\Administrator> irb
irb(main):001:0> Dir.pwd
=> "C:/Users/Administrator"
irb(main):002:0> File.join(Dir.pwd,'testing.txt')
=> "C:/Users/Administrator/testing.txt"
irb(main):003:0> File.read(File.join(Dir.pwd,'testing.txt'))
=> "foo bar"

因此,如果您真的想要使用字符串,您也可以这样做:

irb(main):004:0> File.read('C:/Users/Administrator/testing.txt')
=> "foo bar"