为什么Dir#glob不能在Windows上填充我的变量?

时间:2015-03-30 22:16:20

标签: ruby windows glob

我有以下Ruby脚本,它应该将文件的名称插入 contents 数组中:

filelist = Dir.glob('C:\Users\abc\Desktop\drg\*.*')
print filelist
filelist.each do |filepathname|
    contents = IO.read(filepathname)
    puts contents
end

对于上面的代码,我没有得到 filelist 内容的输出。那是为什么?

2 个答案:

答案 0 :(得分:1)

Dir.glob使用反斜杠作为转义字符,因此路径不会是您认为的那样。引用:

  

逃脱下一个元字符。

     

请注意,这意味着你不能在windows上使用反斜杠作为glob的一部分,即Dir [" c:\ foo *"]将不起作用,使用Dir [" c:/ foo *"]而不是。

答案 1 :(得分:1)

使用File#join

在当前字符串中,反斜杠充当转义字符,而不是路径分隔符。更详细,但可能更规范的方法是使用File#join使用File :: SEPARATOR连接路径的各个部分。例如:

path = File.join "C:", "Users", "abc", "Desktop", "drg", "*.*"
Dir.glob path

这种方法的另一个好处是你可以检查 path 变量以确保它有效,这比直接用globbing更加可测试和调试。