我试图在系统$ EDITOR中打开一个tmp文件,写入它,然后读取输出。我可以让它工作,但我想知道为什么调用file.read返回一个空字符串(当文件确实有内容时)
基本上我想知道一旦写入文件就读取文件的正确方法。
require 'tempfile'
file = Tempfile.new("note")
system("$EDITOR #{file.path}")
file.rewind
puts file.read # this puts out an empty string "" .. why?
puts IO.read(file.path) # this puts out the contents of the file
是的,我将在一个确保块中运行它,以便在使用后对文件进行核对;)
我在ruby 2.2.2上使用vim运行它。
答案 0 :(得分:1)
在尝试阅读之前,请确保在文件对象上调用open
:
require 'tempfile'
file = Tempfile.new("note")
system("$EDITOR #{file.path}")
file.open
puts file.read
file.close
file.unlink
这也可以让你避免在文件上调用rewind
,因为你的进程在你打开它的时候没有写任何字节。
我相信IO.read
将始终为您打开文件,这就是为什么它适用于这种情况。而在类似IO的对象上调用.read
并不总是为您打开文件。