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