From: Peter Bailey Date: 2007-10-08T07:40:42+09:00 Subject: Re: The old File.rename not working again. . . . Jay Levitt wrote: > On Mon, 8 Oct 2007 01:19:01 +0900, Sebastian Hungerecker wrote: > >> The code posted above gives you permission errors? Or your original code gives >> you permission errors? Because the code posted above really shouldn't. If the >> code above gives you permission error, it's not because of open file handles. > > Actually, the code above should give him > > TypeError: can't convert String into Integer > > because IO.open wants an integer file descriptor :) He wants > Kernel.open. > > The working code is: > > Dir.glob("*").each do |file| > if /%!PS-Adobe/ =~ open(file) {|f| f.gets} > File.rename(file, file + ".eps") > end > end > > Peter, the key to Nobuyoshi's change above is that the rename now > happens > *outside* the Kernel.open block. It doesn't matter that it happens > inside > the if/end block; that's not what's holding the file open - Kernel.open > is. > Now, the only thing that's done in the block is the gets, and the block > is > closed on the very same line, before the rename happens. Yes, Jay, that worked! And, I beg your pardon, Nobuyoshi, because, I rather glibly just glanced over your code thinking you were just repeating my code. Now, I have to admit, I really need to look at your code, Jay, because, to me, it's like a different "dialect." My primitive Ruby experience is showing, I guess. I've certainly worked with blocks before, and I've certainly worked with opening files before. And, I thought I was being clever here by using "gets" for the first time, knowing that I only wanted to read that first line. Previously, I've used File.read a lot, but, I actually did want to read in the whole file then. But, your casual use of a black and opening a file here kind of blows me away, actually. Thank you everyone. Cheers, Peter -- Posted via http://www.ruby-forum.com/.