如何指定下载目录?我试过这个:
open("D:\Downloads" + filename, 'wb') do |io|
response.read_body do |chunk|
io.write chunk
end
end
但它不起作用。我甚至不知道文件的加载目录。
答案 0 :(得分:1)
引用你的路径。另外我认为你需要添加另一个\
:
open("D:\\Downloads\\" + filename, 'wb') do |io|
response.read_body do |chunk|
io.write chunk
end
end
答案 1 :(得分:0)
open(File.join("D:/Downloads", filename), 'wb')
例如:
filename = 'foo'
"D:\Downloads" + filename # => "D:Downloadsfoo"
File.join("D:\Downloads", filename) # => "D:Downloads/foo"
使用Ruby,没有必要在Windows上的文件名中使用反斜杠(反斜杠)。 Ruby足够聪明,知道代码在Windows上运行,并在必要时自动从正斜杠转换为反斜杠。
请参阅IO documentation:
如果可能,Ruby将在不同的操作系统约定之间转换路径名。例如,在Windows系统上,文件名“/gumby/ruby/test.rb”将打开为“\ gumby \ ruby \ test.rb”。在Ruby字符串中指定Windows样式的文件名时,请记住转义反斜杠:
"c:\\gumby\\ruby\\test.rb"
我们这里的例子将使用Unix风格的正斜杠; File :: ALT_SEPARATOR可用于获取特定于平台的分隔符。
现在,请查看上面使用File.join
的示例代码。您正在使用"D:\Downloads"
转换为D:Downloads
,因为Ruby的双引号字符串解释\D
是为了尝试逃避错误中的D
。因此,Ruby删除了导致"D:Downloads"
的单个反斜杠,使您希望成为相对路径的绝对路径,在运行代码时,该路径将以当前目录为根。意识到你不需要使用反斜杠可以完全解决这个问题,这样你就可以编写"D:/Downloads"
并让你和Ruby感到高兴。
或者,您可以使用像'D:\Downloads'
这样的单引号,Ruby会很乐意接受并理解为D:\\Downloads
,但是,再一次,鉴于上述知识,您不必乱用反斜杠,使它成为一个没有实际意义的点。
“Backslashes in single quoted strings vs. double quoted strings”对您来说是一个很好的补充阅读。