如何指定下载目录?我试过这个:
open("D:\Downloads" + filename, 'wb') do |io|
response.read_body do |chunk|
io.write chunk
end
end
但它不起作用。我什至不知道文件加载在哪个目录中。
很好地引用你的路径。另外我认为您需要添加另一个\
:
open("D:\\Downloads\\" + filename, 'wb') do |io|
response.read_body do |chunk|
io.write chunk
end
end
open(File.join("D:/Downloads", filename), 'wb')
join
并且split
知道路径分隔符,并且会为您做正确的事情。
例如:
filename = 'foo'
"D:\Downloads" + filename # => "D:Downloadsfoo"
File.join("D:\Downloads", filename) # => "D:Downloads/foo"
使用 Ruby,在 Windows 上的文件名中不必使用反斜杠(反斜杠)。Ruby 足够聪明,可以知道代码在 Windows 上运行,并在必要时自动从正斜杠转换为反斜杠。
请参阅IO 文档:
如果可能,Ruby 将在不同的操作系统约定之间转换路径名。例如,在 Windows 系统上,文件名“/gumby/ruby/test.rb”将打开为“\gumby\ruby\test.rb”。在 Ruby 字符串中指定 Windows 样式的文件名时,请记住转义反斜杠:
"c:\\gumby\\ruby\\test.rb"
我们这里的示例将使用 Unix 风格的正斜杠;File::ALT_SEPARATOR 可用于获取特定于平台的分隔符。
现在,看一下上面使用的示例代码File.join
。由于 Ruby 的双引号字符串解释为尝试错误转义,您正在使用"D:\Downloads"
which 被转换为。结果,Ruby 删除了导致 . 的单个反斜杠,将您打算成为绝对路径的内容变成了相对路径,当代码运行时,该路径将植根于当前目录。意识到您不需要使用反斜杠完全消除了问题,让您可以编写并使您和 Ruby 开心。D:Downloads
\D
D
"D:Downloads"
"D:/Downloads"
或者,您可以使用单引号'D:\Downloads'
,如 Ruby 会很高兴地接受并理解它的意思D:\\Downloads
,但是,再次,鉴于上述知识,您不必弄乱反斜杠,这使它成为一个有争议的问题。
“单引号字符串中的反斜杠与双引号字符串”对您来说是很好的补充读物。