【发布时间】:2014-08-02 07:19:58
【问题描述】:
我有一个 ruby 函数可以访问我的 unix 文件系统中的文件。 我有 2050 个文件,每个文件代表一个专用目录中的哈希值。 该函数读取包含电子邮件地址的文件并执行散列函数,找出文件 ID 并打印。
通常我用 Java 做这些事情,但我想开始用 Ruby 做这些事情。我的问题是,在我的函数中,我尝试打开正确的文件进行读取,但是当没有提供代码块时,我看到 open 与 new 的工作方式相同。在 IO 类中,方法 ::openWith no associated block、IO.open 是 ::new 的同义词。
我只需要打开文件,将读取器指针设置为第一个可用行,然后写入并刷新。
为简单起见,我将把每个代码语句放在一行中。该文件应以其当前状态打开(请参阅HERE 评论)。
def dispatch
while (id=IDS_FILE.gets)
bucket="#{BUCKETS}" << (PERFORM HERE THE HASH CALCULATION) ".txt"
#HERE
bucket_file=File.open("#{bucket}","w")
bucket_file.write(id)
bucket_file.close
end
log "Writing #{id.chomp!} to #{bucket_file.to_path}"
end
end
【问题讨论】:
-
IO.open 是 ::new 的同义词 意味着
IO.open的行为与IO.new完全相同。它使用给定的参数创建一个 Ruby IO 对象,而不是一个文件。您需要的是w以外的开放模式。在你的情况下,我想应该是r+ -
@ArieShaw 据我所知(我需要以当前状态打开文件)OP 实际上需要 append mode
a... 但我不确定他是否真的在问。 @JBoy你能重新格式化你的问题并使用正确的解释和空格吗? -
@DMKE 谢谢一百万! 'a' 模式正是我所需要的!
-
我已经添加了一个答案四你接受。尽管如此,您应该编辑自己的问题并重新格式化它。未来的访客会感谢您。