为什么Dir#glob没有在Windows上填充我的变量



我有下面的Ruby脚本,它应该将文件名插入内容数组:

filelist = Dir.glob('C:UsersabcDesktopdrg*.*')
print filelist
filelist.each do |filepathname|
    contents = IO.read(filepathname)
    puts contents
end

对于上面的代码,我没有得到文件列表内容的输出。为什么?

使用文件#join

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

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

这种方法的一个附带好处是,您可以检查路径变量以确保它是有效的,这比直接进行globbing更具可测试性和可调试性。

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

转义下一个元字符。

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

最新更新