我正在尝试用Python创建一个脚本来备份一些文件。但是,这些文件可以随时重命名或删除。我不希望我的脚本通过锁定文件来阻止它;在备份过程中,该文件应该仍然可以随时删除。
我怎样才能在Python中执行此操作?而且,会发生什么?如果无法读取流,我的对象是否会变为空?
谢谢!我对Python有点新鲜。
答案 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/