On Tue, 18 Mar 2008 13:58:33 -0700, Sean DiZazzo wrote: > I'm seeing some behavior that is confusing me. I often use a simple > function to tell if a file is growing...ie being copied into a certain > location. (Can't process it until it's complete)
Surely though, under Windows, while something else is writing to the file you can't open it? So instead of this: def wait_for_open(pathname): """Return file open for reading, or fail. If the file is busy, will wait forever. """ import time while isGrowing(path, 0.2): # defined elsewhere by you time.sleep(1) # wait a bit # now we HOPE we can read the file return open(path, 'r') # this can fail in many, many ways do this: def wait_for_open(pathname): """Return file open for reading, or fail. If the file is busy, will wait forever. """ import time, errno while True: try: return open(path, 'r') except IOError, e: if e.errno == errno.EBUSY: time.sleep(1) else: raise Note: I've made a guess that the error you get under Windows is errno.EBUSY. You'll need to check that for yourself. This whole approach assumes that Windows does the sensible thing of returning a unique error code when you try to open a file for reading that is already open for writing. -- Steven -- http://mail.python.org/mailman/listinfo/python-list