如果文件为空,则程序应写入"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
语句应该检查文件是否为空,但我不认为它工作正常。我做错了什么?
编辑-问题已解决:
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"选项会截断文件(如果存在),或者创建一个新文件(如果不存在)-在这种模式下,它将始终为空打开。有关选项,请参见此处。
File.readlines
不需要文件对象、字符串("path/to/filename.txt"),或者在这种情况下fname
就可以了。
您的代码与您的问题不匹配。
你说:
如果文件为空,程序应写入"文件为空";否则它应该写"文件已满"
但你的代码上写着:
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")
作为一个快速简单的解决方案。