Ruby - 检查空

时间:2015-06-29 20:05:38

标签: ruby file fwrite fread

如果文件为空,程序应写"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

2 个答案:

答案 0 :(得分:4)

" w" va_list中的选项会截断文件(如果该文件存在)或创建新文件(如果该文件不存在) - 在此模式下它将始终为空。有关选项,请参阅here

SELECT * FROM ( SELECT Instance=ROW_NUMBER() OVER (PARTITION BY PersonName), PersonID=CASE WHEN d.PersonName IS NULL THEN 'XXXX' ELSE p.PersonID END, d.Fields FROM Person p LEFT OUTER JOIN Details d on d.PersonName=p.PersonName )AS X WHERE Instance=1 不需要文件对象,字符串(" path / to / filename.txt"),或者在这种情况下File.open(fname,"w")也可以。

答案 1 :(得分:3)

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

你说:

  

程序应该写"文件空"如果文件是空的;除此以外,   它应该写" 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.zero?("filename")作为快速简便的解决方案。