Wow..well my 2cents about #2.  Not sure but try using the block version 
of open, like this:

File.open( "file.txt" ) { |file|
    # use file here
}

The file should close at the end of that block.

Gawnsoft wrote:

>I've finally overcome my newbie embarrassment enough to post about
>actual code 
>
>--------------------
>
>After a couple of years(!) of about-to, I finally leapt over enough
>conceptual hurdles to use Ruby for something.  (RubyWin 0.0.3.5, with
>Ruby 1.6.4)  (And thank you Dave and Andy for providing the book with
>the distro)
>
>I was really quite insanely pleased that my first use of Ruby did
>something really quite involved - it counts the number of unique IP
>addresses of people who have downloaded a particular file from my
>web-server -  and did it in four lines of code!
>
>   aFile = File.open('D:/Data/Logs/Savant/copyOfGeneral.txt')
>
>   aDictionary = Hash.new
>
>   aFile.each_line { | line | aDictionary[line.slice(/[0-9.]+/)] = 1
>if line.include?("plastic_1.1_lite-UMLtool-fw.exe") }
>
>   puts aDictionary.size
>
>And then I amended it to tell me how often the file was downloaded
>from each unique IP address by changing the following lines to:
>
>   aDictionary = Hash.new(0)
>
>   aFile.each_line { | eachLine | aDictionary[ /[0-9.]+/ ] =
>aDictionary[ /[0-9.]+/ ] + 1 if
>eachLine.include?("plastic_1.1_lite-UMLtool-fw.exe") }
>
>All well and good - and I was surprised how quickly I got my head
>round file handling, hashes and regular expressions, and delighted at
>the way I could use a regexp as the index of a hash.
>
>(Btw, the file in question is a quite competent little UML diagramming
>tool - freeware, for Windows, less than 2MB, which autogenerates Java
>stub code.  If anyone is interested in that sort of thing, it's
>available from the Smalltalk links page in my sig)
>
>I have some fresh and queries and problems though - 
>
>1) After the file has been opened and I've iterated through it once, I
>can't successfully iterate through the opened file for something else.
>e.g. 
>
>   dictionary2 = Hash.new(0)
>
>   aFile.each_line { | eachLine | dictionary2[ /[0-9.]+/ ] =
>dictionary2[ /[0-9.]+/ ] + 1 if eachLine.include?("anotherfile") }
>
>-----------
>
>2) I then tried to get the no-longer usable file garbage-collected by
>IRB-ing
>
>   aFile = nil   
>
>but even after evaluating this statement, another windows app still
>fails to be able to over-write copyOfGeneral.txt 
>
>What should I do to get Ruby to 'free up' the file?
>
>-----------
>3) I tried to cut it down from 4 lines of code to 3 lines of code by
>using:
>   (File.open("d:/Data/Logs/Savant/copyOfGeneral.txt")).each_line {
>|line| blah... }
>
>I'm sure I've seen snippets of code in the newsgroup that call methods
>from the result of called methods, although the real reason I tried it
>is because I'm currently learning Smalltalk where 
>
>   ( File open: "name of aFile" ) each_line: [ blah... ]     #
>pseudocode only this, in all probability, btw
>
>works as the parenthesised expression is evaluated first and returns
>aFile, which is then sent the eac_line message
>
>What are the rules as to when   object.method.method    is a valid
>Ruby construct?   Is it ever a valid Ruby construct?
>------------
>4) I'd like to c'n'p a multi-line method into IRB all at once.  Can I?
>And if so, how?
>
>def countDownloads (aFile, aString)
>
>  anIpNum = Regexp.new('[0-9.]+')
>
>  aDictionary = Hash.new(0)
>
>  aFile.each_line { | line | aDictionary[line.slice(anIpNum)] =
>aDictionary[line.slice(anIpNum)] + 1 if line.include?(aString) }
>
>  puts aDictionary.size
>
>end
>------------
>5) I'd like to save this method as a .rb file, and invoke it from IRB.
>How do I?
>------------
>6) I'd like to change the current Windows directory from within IRB.
>How do I?
>
>Using irb_context, I saw there was an irb_path set (to be '(irb)' so I
>tried: conf.irb_path="d:/data/grlcode"  which returned: 
>NameError: undefined local variable or method `conf' for
>#<Object:0x463b638>
>
>
>Cheers, 
>   Euan
>Gawnsoft: http://www.gawnsoft.co.sr
>Symbian/Epoc wiki:  http://html.dnsalias.net:1122
>Smalltalk links (harvested from comp.lang.smalltalk)  http://html.dnsalias.net/gawnsoft/smalltalk
>
>
>  
>