[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

File deletion failed -- how to handle problem?

RichardOnRails

3/30/2006 5:03:00 AM

Hi All,

I wrote a simple test a techiques I'll apply in an app I'm going start
shortly. One thing my test did is: -- -- open a non-existent file for
appending,
-- populate it
-- close it
-- open it for reading, expecting automatic closure when reading ended
-- looped through file printing its line to STDOUT
-- attempted to delete the file -- got "Permission denied -
TestOutput.txt (Errno::EACCES)"

I tested it under SciTE.

The relevant code fragment is listed below. I think the problem is
that the file is in the process of being closed by WindowsXP-Pro when
the delete request hits the OS and the OS complains.

If that's correct, all I have to do is write some loop that naps and
re-attempts the deletion until successful. Is there better approach,
or is my analysis wrong in the first place?

********* Code fragment ****************
puts "\nDisplaying the content of #{fno}:"
puts "Opening #{fno}'"
File.open(fno, "r") do |file| # Open for reading
while sLine = file.gets
puts sLine
end
end # File will be closed automantically when scope of "do" exited
puts "#{fno} closed"

puts "\nDeleting #{fno}"
File.delete(fno)
*************************************************

TIA,
Richard

4 Answers

Pit Capitain

3/31/2006 11:21:00 AM

0

Richard schrieb:
> I wrote a simple test a techiques I'll apply in an app I'm going start
> -- open a non-existent file for appending,
> -- populate it
> -- close it
> -- open it for reading, expecting automatic closure when reading ended
> -- looped through file printing its line to STDOUT
> -- attempted to delete the file -- got "Permission denied -
> TestOutput.txt (Errno::EACCES)"
>
> I tested it under SciTE.
> ...

Richard, your code works for me, when I run it from the command line. I
haven't tried it with SciTE.

Regards,
Pit


Chris Hulan

3/31/2006 2:48:00 PM

0

Worked for me:

ruby 1.8.2 (2004-12-25) [i386-mswin32]
SciTE Version 1.59

Daniel Berger

3/31/2006 4:02:00 PM

0


Richard wrote:
> Hi All,

<snip>


> If that's correct, all I have to do is write some loop that naps and
> re-attempts the deletion until successful. Is there better approach,
> or is my analysis wrong in the first place?
>
> ********* Code fragment ****************
> puts "\nDisplaying the content of #{fno}:"
> puts "Opening #{fno}'"
> File.open(fno, "r") do |file| # Open for reading
> while sLine = file.gets
> puts sLine
> end
> end # File will be closed automantically when scope of "do" exited
> puts "#{fno} closed"
>
> puts "\nDeleting #{fno}"
> File.delete(fno)
> *************************************************

It looks like you're passing around a fileno. If that's the case, the
implication is that you've opened the filehandle somewhere else, but
haven't closed it.

Also, you're better off using IO.foreach(file) instead of the File.open
block you've got there.

Regards,

Dan

RichardOnRails

4/6/2006 6:26:00 PM

0

Hi Daniel,

I thought I just responded to your Mar. 31 post a minute ago, but
apparently it disappeard in Cyberspace.

> Also, you're better off using IO.foreach(file)

Thanks, I'll look into that, but first I'm going to try my suspicion
that Ruby failed to close my original output file after I closed it and
re-opened it for reading. I've had to suspend working on the thing for
a while, but I'll get back to this weekend.

Regards,
Richard