By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
434,741 Members | 2,009 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 434,741 IT Pros & Developers. It's quick & easy.

Determining if a file is locked in Windows

P: n/a
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....iles%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

Oct 18 '06 #1
Share this Question
Share on Google+
6 Replies


P: n/a
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....iles%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
Oct 18 '06 #2

P: n/a
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....iles%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.

Oct 19 '06 #3

P: n/a
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....iles%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?

Oct 19 '06 #4

P: n/a

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....iles%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?

Oct 19 '06 #5

P: n/a
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.
>
>
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.
You can try to copy to a dst file that is not the backup file, but
instead it's in a temp location or with a temp name.

If the copy fails with IOError, just delete the new 0 bytes temp file.
If the copy doesn't fail, delete the old backup, rename the new temp
file to the destination name, and you are done. The rename part
shouldn't fail since you are operating in a new file that's not locked.
And for extra safety, don't erase the old backup before renaming the
new one, but rename to .bak.old or something like that.

Good luck.

Ricardo

Oct 20 '06 #6

P: n/a
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.
>
>
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.
You can try to copy to a dst file that is not the backup file, but
instead it's in a temp location or with a temp name.

If the copy fails with IOError, just delete the new 0 bytes temp file.
If the copy doesn't fail, delete the old backup, rename the new temp
file to the destination name, and you are done. The rename part
shouldn't fail since you are operating in a new file that's not locked.
And for extra safety, don't erase the old backup before renaming the
new one, but rename to .bak.old or something like that.

Good luck.

Ricardo

Oct 20 '06 #7

This discussion thread is closed

Replies have been disabled for this discussion.