[Tutor] how to check if a file is being used by another person orapplication before writing to it?

Alan Gauld alan.gauld at freenet.co.uk
Tue Nov 30 23:05:29 CET 2004


> I need to read/write from/to a file although I do not want 
> to read/write a file that is being used by another person 

This is very dependant on the operating system.
For example CP/M used to tell you if a file was locked for 
read or for write(one of CP/Ms few good features!), whereas 
ISTR Unix only tells you its locked for writing - indeed 
it may not lock the file at all for reads. I suspect 
Microsoft will do the same but I've never tried...

One approach is to read the access time (see below) and 
compare with now, but that's hardly an exact science!

> similarly is there a way to check if a file has been written to? 

This is easier since both Unix and Windows provide access to 
the modification time. This is better than checking size since 
a modification could change two bytes say without changing the 
file size.

Look in the os.stat() function docs and at the path.getmtime() 
function.

The stat() function also returns the access time which tells 
you when the file was last read or executed. Unfortunately it 
doesn't tell you if the file is still being accessed!

The usual approach in my experience is to open for write and
check for IOErrors. If no error then go ahead and write and 
rely on the other program (if there is one) to either refuse 
to update the file after a change or to warn the user (this 
is what vi does).

Its not very satisfactory and I look forward to anyone else 
providing a better answer on this one!

HTH,

Alan G
Author of the Learn to Program web tutor
http://www.freenetpages.co.uk/hp/alan.gauld


More information about the Tutor mailing list