2

下面是我的代码,它似乎运行良好并按预期写入文件。但是,我根本无法获得第 45 行 puts target.read() 来显示 target 的内容。请帮忙。哦,对我的代码其他部分的任何其他批评或建议也将不胜感激。

filename = ARGV.first
script = $0

puts "We're going to erase #{filename}."
puts "If you don't want that, hit CTRL-C."
puts "If you do want that, hit RETURN."

print ">>"
STDIN.gets

puts "Opening the file...."
target = File.open(filename, 'w')

puts "Truncating the file."
target.truncate(target.size)

puts "Now, I'm going to ask for you three lines."

print "line 1: "; line1 = STDIN.gets.chomp()
print "line 2: "; line2 = STDIN.gets.chomp()
print "line 3: "; line3 = STDIN.gets.chomp()

puts "I'm going to write these to the file."

target.write(line1)
target.write("\n")
target.write(line2)
target.write("\n")
target.write(line3)
target.write("\n")
puts "Do you want to continue and perform the same"
puts "task with one line of target.write() methods?"
puts "Give me a 'yes' or a 'no'."
print ">>"
answer = STDIN.gets.chomp()
puts "=============================="
if answer == "yes"
target.write("#{line1}\n#{line2}\n#{line3}\n")
end

puts "This is the content of #{filename}:\n"
target = File.open(filename)
# Cannot figure out why the program is not displaying the contents
# of the target file when it's run.
puts target.read()
puts "And finally, we close it."
target.close()
4

2 回答 2

0

你应该这样打开target阅读:

target = File.open(filename, 'r')

根据文档,read需要一个整数参数来表示要读取的字节数。相反,我建议使用迭代方法并逐行打印。您之前也不必打开文件,但我想我会向您展示 open 中的 'r' 参数。

这就是我要做的:

IO.foreach(filename) do |line|
  puts line
end

此方法在块完成后关闭文件,因此无需显式调用 close。不过,在阅读之前,请确保在写入文件后关闭文件。

于 2013-06-09T20:05:11.260 回答
0

尝试以 'w+'模式打开文件:

target = File.open(filename,'w+')

这样,它以读写方式打开文件,将现有文件截断为零长度或创建一个新文件进行读写。因此,不需要稍后在代码中进行显式截断。

完成写入后,文件光标位于文本末尾。在开始阅读之前,应将光标放回第一个字节:

target.rewind
于 2013-06-09T20:35:34.973 回答