I'm having trouble getting an open/write/close cycle to actually put the
correct data in the file. Here's some code that illustrates the problem:
<snip>
x = "012345678\n"
10.times do
len = 0
begin
len = File.stat( 'junk').size
rescue
len = 0
end
puts len.to_s
f = File.open 'crapper', 'w'
f.seek len
f.write x
f.close
end
</snip>
produces:
0
10
20
30
40
50
60
70
80
90
as output. However, the file 'junk' is filled with zeroes, except for
the last 10 bytes, which are what you'd expect them to be:
Anyone know what I'm doing wrong? I tried using sysseek and syswrite,
but I got the same results. Is Ruby's internal buffering screwing me up
here somehow? TIA.
opening a file for writing truncates it. Does this, opening it for reading & writing, do what you want?
x = "012345678\n"
10.times do
len = 0
begin
len = File.stat( 'junk').size
rescue
len = 0
end
puts len.to_s
f = File.open 'junk',File::RDWR|File::CREAT
f.seek len
f.write x
f.close
end
Mike
···
On 24-Mar-06, at 11:43 AM, Toby DiPasquale wrote:
Hi all,
I'm having trouble getting an open/write/close cycle to actually put the
correct data in the file. Here's some code that illustrates the problem:
<snip>
x = "012345678\n"
10.times do
len = 0
begin
len = File.stat( 'junk').size
rescue
len = 0
end
puts len.to_s
f = File.open 'crapper', 'w'
f.seek len
f.write x
f.close
end
</snip>
produces:
0
10
20
30
40
50
60
70
80
90
as output. However, the file 'junk' is filled with zeroes, except for
the last 10 bytes, which are what you'd expect them to be:
- f = File.open 'crapper', 'w'
+ f = File.open 'junk', 'w'
Sorry.
Not a problem.
When I run your snippet i get:
ruby -w fwrite-test.rb
0
11
22
33
44
55
66
77
88
99
It looks like seeking on an empty file fills it with null data. Not
sure if thats a Ruby thing or a feature of the underlying IO libs.
change the 'w' to an 'a' (an delete the current 'junk' file)
and the file produced looks like:
012345678
012345678
012345678
012345678
012345678
012345678
012345678
012345678
012345678
012345678