Python:打开文件而不创建锁

时间:2013-01-17 21:38:59

标签: python backup file-locking filestreams

我正在尝试用Python创建一个脚本来备份一些文件。但是,这些文件可以随时重命名或删除。我不希望我的脚本通过锁定文件来阻止它;在备份过程中,该文件应该仍然可以随时删除。

我怎样才能在Python中执行此操作?而且,会发生什么?如果无法读取流,我的对象是否会变为空?

谢谢!我对Python有点新鲜。

2 个答案:

答案 0 :(得分:6)

正如所提到的,这是一个特定于Windows的问题。 Unix操作系统允许删除。

要在Windows中执行此操作,我需要使用win32file.CreateFile来使用Windows特定的dwSharingMode标志(在Python的win32file中,它只是称为“sharingmode”)。这是一些关于它的文档: http://docs.activestate.com/activepython/2.7/pywin32/win32file__CreateFile_meth.html

粗略示例:

import win32file # Ensure you import the module.

file_handle = win32file.CreateFile('filename.txt', win32file.GENERIC_READ, win32file.FILE_SHARE_DELETE | win32file.FILE_SHARE_READ | win32file.FILE_SHARE_WRITE, None, win32file.OPEN_EXISTING, win32file.FILE_ATTRIBUTE_NORMAL, None)

答案 1 :(得分:4)

在类UNIX操作系统上,包括Linux,这不是问题。好吧,其他一些程序可能会在您阅读文件的同时写入该文件,这可能会导致问题(您复制的文件最终可能会损坏)但这可以通过验证通过来解决。

在Windows上,使用卷快照服务(又称卷影复制)。 VSS会在某个时刻创建卷的快照,您可以在快照上打开文件而不将文件锁定在原始卷上。一个快速的谷歌发现了一个Python模块,用于在这里使用VSS进行复制:http://sourceforge.net/projects/pyvss/