我想写一个文件然后立即等待,直到满足某些条件,在尝试之间休息1秒。我正在尝试做的一个例子如下:
thingsToGet = ["schwifty", "down", "low"]
writeFile = File.new("myfile.txt", "w")
thingsToGet.each do |element|
writeFile.puts "#{element}"
while #some condition is false
sleep(1)
end
### HERE for some reason is when writeFile gets written to
end
正如你在上一条评论中所看到的那样,出于某些原因,即使writeFile.puts
出现在等待条件的while循环之前,实际写入仅在while循环结束后发生。
关于为什么会发生这种情况的任何想法?
答案 0 :(得分:2)
实际上writeFile
是在文件关闭后写的,而不是在while
循环结束后写的;这是因为文件在流关闭后保存,因此在此之前您将无法看到文件中的任何更改。
我假设您稍后在代码中关闭该文件,或者在程序运行后自动关闭该文件(尽管您应该自行关闭它),这就是您看到文件更新的原因程序结束后。
如果您希望每次使用puts
时都看到更新的文件,那么您必须每次在循环中关闭(并打开)它;例如:
thingsToGet = ['schwifty', 'down', 'low']
thingsToGet.each do |element|
File.open('myfile.txt', 'a') do |file|
file.puts("#{element}")
end
while ##some condition is false
sleep(1)
end
### HERE for some reason is when writeFile gets written to
end
要注意两件事:
File.open
与块一起使用,因此文件将在块执行后关闭。a
打开模式打开,追加文本,而不是每次打开时都删除它(如果它打开的话)使用了w
。请注意,在您写入的每一行上打开和关闭文件都可能导致程序出现性能问题。