File IO and Threading

J

Jayme Pechan

I seem to have run into a strange problem. I'm hoping one of you understand
the inner working of the file IO better than I and could explain why I'm
seeing what I am. Basically, I have a log folder where I append to text
files frequently. Every 10 minutes or so, I check to see if the files are
greater than a certain size and then archive them. After archiving the
files, I use the File.Delete function to delete each of the files. I put
the File.Delete in a lock section to ensure that it completes before another
threat attempts to write to them. The problem I'm seeing is that it seems
like the File.Delete doesn't delete the files immediately and even though it
is supposed to remove it from the directory tree (I think), if another
thread attempts to append to one of these files too soon after leaving my
lock block, the whole program locks up. I thought of putting in a sleep
after the deletions but I wouldn't know how long to set it for.

My solution is to move the files to a sub folder first before deleting them
but wanted to see if anyone would know why I'm having this problem in the
first place.

Thanks

Jayme
 
S

Sean Chambers

A better way would be to rename the file first, like logfile.log.old.

This way if another thread tries to write, it will recreate the file as
the file doesn't exist, then shortly thereafter the logfile.log.old is
deleted.

Would this work?

If not, try putting a 10ms sleep, then 20ms, all the way up until you
find the correct amount of time to sleep for, although I would
recommend against putting the thread to sleep. I don't usually use this
method as it feels kind of clunky to me.

Sean
 
M

Michael D. Ober

Can we see your code. At least the writes and deletes.

Thanks,
Mike Ober.
 
G

Gaurav Vaish \(www.EdujiniOnline.com\)

like the File.Delete doesn't delete the files immediately and even though
it is supposed to remove it from the directory tree (I think), if another

Are you sure that when you are deleting the file, the file is not already
opened?

If the file is already opened, File.Delete will not throw any exception but
the file will be deleted only when it is closed.

The method is nothing but a wrapper around the DeleteFile method in Win32
API (see url below).

http://windowssdk.msdn.microsoft.com/en-gb/library/ms685330.aspx

Pay attention to the 'Remarks' section:

The DeleteFile function marks a file for deletion on close. Therefore, the
file deletion does not occur until the last handle to the file is closed.


Hope that helps...



--
Happy Hacking,
Gaurav Vaish | www.mastergaurav.com
www.edujinionline.com
http://eduzine.edujinionline.com
-----------------------------------------
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top