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



如果文件为空,则程序应写入"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")作为一个快速简单的解决方案。

相关内容

  • 没有找到相关文章

最新更新