Ruby 临时文件与文件

HXH*_*HXH 3 ruby filestream ruby-on-rails-3

Tempfile 我想知道和之间的区别File

我找到 :

require 'open-uri'

open('c:/boot.ini'){|file|
  puts file.class  #File 
}

open('http://coderlee.cnblogs.com'){|file|
  puts file.class #Tempfile
}
Run Code Online (Sandbox Code Playgroud)

当我将流保存到远程存储服务器时,会Tempfile导致错误,似乎是编码的原因,不是ASCII-8BIT为什么?

Mar*_*tin 5

在第一种情况下,您将从文件系统加载文件。这将使用文件名(它有一个)创建一个 File 对象。

在第二种情况下,您将打开一个流向远程文件的流。您的文件系统上没有关联的文件,但如果您想对其进行任何操作,则需要一个关联的文件。因此,Ruby 会为您创建一个具有唯一文件名的临时文件,您甚至不需要知道该文件名(因为资源本身没有名称)。它的行为与 File 对象完全相同。