Robert Klemme
11/12/2003 11:00:00 AM
Maybe it's because you didn't terminate with "\n".
"T. Onoma" <transami@runbox.com> schrieb im Newsbeitrag
news:E1AJs2a-0004hd-RA@odie.runbox.com...
> I'm confused. why won't this print? I tried flushing the $defout and
$stdout as well as the source_file_io, but that doesn't work either.
I'd try $defout.sync=true then you don't need the flushes.
> # download
> prioritized_locations.each do |location|
> begin
> source_file_io = File.open(self.source_path,'w')
> remote_file = open(location)
> while incoming = remote_file.read(512)
> source_file_io.write(incoming)
> # THIS WON'T THIS PRINT!!!!!!!!!!!
> print "\ca{source_file_io.pos}KB/#{@source_size}KB"
did you mean
print "#{source_file_io.pos}KB/#{@source_size}KB\n"
?
> end
> rescue
> puts "#{location} failed"
> remote_file.close unless remote_file.nil?
> source_file_io.close unless source_file_io.nil?
Closing here is superfluous since "ensure" takes care of that.
> next # try next location
superfluous as well.
> else
> puts ' Done.'
> break # we got it
superfluous as well.
> ensure
> remote_file.close unless remote_file.nil?
> source_file_io.close unless source_file_io.nil?
> end
> end
In the end we get much cleaner code:
require 'open-uri'
# download
$defout.sync = true
prioritized_locations.each do |location|
begin
File.open(self.source_path,'w') do |source_file_io|
open(location) do |remote_file|
while incoming = remote_file.read(512)
source_file_io.write(incoming)
print "#{source_file_io.pos}KB/#{@source_size}KB "
end
end
end
rescue => e
$stderr.puts "#{location} failed: #{e}"
else
puts 'Done.'
end
end
This works for me - and does print.
robert