为什么这个简单的 Ruby 程序没有打印出我期望的结果?

发布于 2024-09-02 22:01:08 字数 308 浏览 4 评论 0原文

我有这个:

require 'tempfile'
t = Tempfile.new('test-data')
t.open
t.sync = true
t << "apples"
t.puts "bananas"
puts "contents are [#{t.read}] (#{t.size} bytes)"
t.close

这个打印:

contents are [] (14 bytes)

为什么内容没有实际显示?我使用的是 Ruby 1.9.2。

I have this:

require 'tempfile'
t = Tempfile.new('test-data')
t.open
t.sync = true
t << "apples"
t.puts "bananas"
puts "contents are [#{t.read}] (#{t.size} bytes)"
t.close

This prints:

contents are [] (14 bytes)

Why aren't the contents actually shown? I'm on Ruby 1.9.2.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

故乡的云 2024-09-09 22:01:08

问题是您正在文件中的当前 IO 指针处进行读取,该指针在写入后已经位于末尾。您需要在读取之前执行倒回。在你的例子中:

require 'tempfile'
t = Tempfile.new('test-data')
t.open
t.sync = true
t << "apples"
t.puts "bananas"
t.rewind
puts "contents are [#{t.read}] (#{t.size} bytes)"
t.close

The problem is that you are doing a read at the current IO pointer in the file, which is already at the end after your writes. You need to do a rewind before the read. In your example:

require 'tempfile'
t = Tempfile.new('test-data')
t.open
t.sync = true
t << "apples"
t.puts "bananas"
t.rewind
puts "contents are [#{t.read}] (#{t.size} bytes)"
t.close
小猫一只 2024-09-09 22:01:08

您可能位于流的末尾,没有剩余的字节。写入之后、读取之前,您应该倒带文件(重新打开或查找位置 0)。

require 'tempfile'
t = Tempfile.new('test-data')
t.open
t.sync = true
t << "apples"
t.puts "bananas"
t.seek 0
puts "contents are [#{t.read}] (#{t.size} bytes)"
t.close

You are probably at the end of the stream, where there are no more bytes left. After writing and before reading you should rewind the file (reopen or seek to position 0).

require 'tempfile'
t = Tempfile.new('test-data')
t.open
t.sync = true
t << "apples"
t.puts "bananas"
t.seek 0
puts "contents are [#{t.read}] (#{t.size} bytes)"
t.close
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文