Ruby - 检查是否为空后无法写入文件

Ruby - Can't write to file after checking if empty

如果文件为空,程序应该写入"File Empty";否则,它应该写成"File Full"。这是我目前所拥有的:

fname = "fileTest.txt"
somefile = File.open(fname, "w")

if File.readlines(somefile).grep(/monitor/).size == 0
    somefile.write("File Empty")
else
    somefile.write("File Full.")
end

somefile.close

当我第一次运行这个的时候,fileText.txt是空的,所以程序写"File Empty"。当我第二次 运行 时,程序应该写入 "File Full",但文件仍然读取 "File Empty"

if 语句应该检查文件是否为空,但我不知道它是否正常工作。我做错了什么?

EDIT - Problem Solved:

fname = "fileTest.txt"
somefile = File.open(fname, "a")

if File.zero?(somefile)
  somefile.write("File Empty")
else
  somefile.write("File Full.")
end

somefile.close

File.open(fname,"w") 中的 "w" 选项会截断文件(如果存在)或创建新文件(如果不存在)- 在此模式下打开时始终为空。有关选项,请参阅 here

File.readlines 不需要文件对象、字符串 ("path/to/filename.txt"),或者在这种情况下 fname 就可以了。

您的代码与您的问题不符。

你说:

The program should write "File Empty" if the file is empty; otherwise, it should write "File Full"

但是你的代码是这样说的:

if File.readlines(somefile).grep(/monitor/).size == 0
    somefile.write("File Empty")
else
    somefile.write("File Full.")
end

您正在寻找与 monitor 匹配的 RE,如果您没有找到它,您的代码会写成 "File Empty".

"File Empty"不包含"monitor",所以程序第二次运行时,再次报"file empty"

如果您真的想解决我引用的问题,那么您可以使用 File.zero?("filename") 作为快速简便的解决方案。