You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Learn Ruby The Hard Way练习16:写入文件后读取代码未执行问题排查

问题分析与解决方案

嘿,我猜你大概率是遇到了文件指针位置或者文件打开模式的问题!让我给你拆解一下为什么那部分查看内容的代码没执行(或者说没输出内容):

核心原因

  1. 写入后指针停在文件末尾
    当你用写入模式打开文件并写完内容后,Ruby的文件读写指针会停在你写入的最后一个字符后面。这时候如果直接调用read方法,指针后面没有任何内容,自然读不到东西,看起来就像那部分代码没跑起来。

  2. 打开模式的限制(可能)
    如果你用的是'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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:40:25