MatthewWarren wrote: > elake wrote: > > Larry Bates wrote: > > > elake wrote: > > > > I found this thread about a pst file in Windows being locked and I am > > > > having the same issue. > > > > > > > > > > http://groups.google.com/group/comp.lang.python/browse_thread/thread/d3dee5550b6d3652/ed00977acf62484f?lnk=gst&q=%27copying+locked+files%27&rnum=1 > > > > > > > > The problem is that I have a script that can find the pst files on > > > > every machine in my network and back them up to a server for safe > > > > keeping. The problem is that when Outlook is running it locks the file > > > > and will not allow me to copy it to the destination. I am using the > > > > shutil module for the copy. > > > > > > > > Is there a way to first determine if the file is locked and then do the > > > > copy if it isn't? I thought about looking to see if Outlook.exe is > > > > running but the machines are shared and the process could be running > > > > but with a different pst file in use. > > > > > > > > Thanks in advance > > > > > > > Try the copy and catch the exception instead. > > > > > > -Larry Bates > > > > Larry thanks for your suggestion. this is what I tried: > > > > #!/usr/bin/env python > > > > import os, shutil > > > > path = 'c:\documents and settings\username\Local Settings\Application > > Data\Microsoft\Outlook' > > > > src = 'Outlook.pst' > > dst = 'test.pst' > > > > os.chdir(path) > > > > try: > > shutil.copy2(src, dst) > > except IOError: > > print 'Must be locked by Outlook' > > > > print 'Finished' > > > > The problem is that even though I catch the IOError it overwrites the > > dst file and makes it 0kb. This is going to be for backing these files > > up and it wont be good to overwrite the backup with a bad copy. > > > > Is there another way to do this that I am missing. I am still kind of > > new to Python. If i could tell that outlook had the file locked before > > I tried the copy then I think that it would be prevented. > > maybe try and open the file for reading first, then if it opens ok, > just close it and do the copy?
I tried to do that and it did let me open it without an error. Here is what I have done now and it seems work. def copyFile(src, dst): if os.path.isfile(dst): shutil.copy2(dst, dst_bak) try: shutil.copy2(src, dst) except IOError: if os.path.isfile(dst_bak): shutil.copy2(dst_bak, dst) os.remove(dst_bak) else: try: shutil.copy2(src, dst) except IOError: if os.path.isfile(dst_bak): shutil.copy2(dst_bak, dst) It check to see if the dst file is there first and them makes a backup of it first. That way if the copy goes bad then there is still a backup of it. Do you see anywhere that I could have done this better/differently? -- http://mail.python.org/mailman/listinfo/python-list