0

如何指定下载目录?我试过这个:

open("D:\Downloads" + filename, 'wb') do |io|
  response.read_body do |chunk|
    io.write chunk
  end
end

但它不起作用。我什至不知道文件加载在哪个目录中。

4

2 回答 2

1

很好地引用你的路径。另外我认为您需要添加另一个\

open("D:\\Downloads\\" + filename, 'wb') do |io|
  response.read_body do |chunk|
    io.write chunk
  end
end
于 2013-09-17T18:22:09.273 回答
0

利用 File 类的能力splitjoin路径:

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\DD"D:Downloads""D:/Downloads"

或者,您可以使用单引号'D:\Downloads',如 Ruby 会很高兴地接受并理解它的意思D:\\Downloads,但是,再次,鉴于上述知识,您不必弄乱反斜杠,这使它成为一个有争议的问题。

单引号字符串中的反斜杠与双引号字符串”对您来说是很好的补充读物。

于 2013-09-17T18:43:10.357 回答