我有下面的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*"]。