Learn Ruby The Hard Way练习16:写入文件后读取代码未执行问题排查
问题分析与解决方案
嘿,我猜你大概率是遇到了文件指针位置或者文件打开模式的问题!让我给你拆解一下为什么那部分查看内容的代码没执行(或者说没输出内容):
核心原因
写入后指针停在文件末尾
当你用写入模式打开文件并写完内容后,Ruby的文件读写指针会停在你写入的最后一个字符后面。这时候如果直接调用read方法,指针后面没有任何内容,自然读不到东西,看起来就像那部分代码没跑起来。打开模式的限制(可能)
如果你用的是'w'模式打开文件,虽然它允许写入,但有些场景下它的读权限表现不如'w+'模式直接(不过这个不是最主要的问题,核心还是指针位置)。
两种解决办法
办法一:重置文件指针到开头
写完内容后,调用seek(0)把指针拉回文件起始位置,这样就能读到刚写入的内容了。示例代码:
filename = ARGV.first # 用w+模式打开,支持读写操作 file = File.open(filename, 'w+') # 让用户输入三行内容 puts "请输入第一行内容:" line1 = gets.chomp puts "请输入第二行内容:" line2 = gets.chomp puts "请输入第三行内容:" line3 = gets.chomp # 写入文件内容 file.write("#{line1}\n#{line2}\n#{line3}\n") # 关键:把指针移回文件开头 file.seek(0) # 现在就能读到内容了 puts "\n新文件的内容如下:" puts file.read file.close
办法二:写完关闭后重新打开读取
如果觉得指针操作有点绕,也可以写完文件后先关闭,再用只读模式重新打开读取,这样更直观:
filename = ARGV.first # 第一步:写入内容 file = File.open(filename, 'w') puts "请输入第一行内容:" line1 = gets.chomp puts "请输入第二行内容:" line2 = gets.chomp puts "请输入第三行内容:" line3 = gets.chomp file.write("#{line1}\n#{line2}\n#{line3}\n") file.close # 写完先关闭 # 第二步:重新打开读取 file = File.open(filename, 'r') puts "\n新文件的内容如下:" puts file.read file.close
你可以试试这两种方法,应该就能看到你刚写入的内容啦!
内容的提问来源于stack exchange,提问作者Asarluhi
相关产品推荐
相关产品推荐

