复制当前锁定的文件的API调用是什么。我希望能够使用.Net,但Win32调用也没问题。
请随意在Unix或任何其他操作系统上使用相同的功能。
答案 0 :(得分:16)
您可以使用VSS(卷影复制服务,而不是Visual SourceSafe)API来实现此目的。虽然功能强大,但这并不是一个易于使用的API:Overview of Processing a Backup Under VSS应该让您了解所涉及的内容。
即使它是一个相对较新的API,但对VSS的.NET支持几乎(并且不可原谅地)不存在。您无法通过Interop调用大多数API,并且Framework文件函数将无法与VSS用于公开快照文件的内核命名空间一起使用。作为奖励,有可怕的32/64位和XP-vs-Vista问题,部署也令人兴奋(微软的负责团队应该感到非常自豪!)
无论如何,AlphaVSS项目打算为.NET带来完整的VSS功能,看起来非常有前景,尽管它还处于测试前阶段。它可能只是为你做的,它是开源的(Managed C ++)。
有关如何使用Win32执行操作的一个很好的示例,请参阅HoboCopy。该实用程序本身非常有用,完整的C ++源代码也可以从SourceForge project page获得。
答案 1 :(得分:5)
与我对another question的答案几乎相同:
如果您使用的是Win32,那么正式的方法是将其标记为在重新启动时移动,并要求用户重新启动。要标记要在重新引导时移动的文件,请使用带有MoveFileEx
标记的MOVEFILE_DELAY_UNTIL_REBOOT
。
它是相同的功能,只是这次你没有传递NULL作为目的地。
答案 2 :(得分:4)
根据确切锁定文件的内容,您可以执行System.IO.File.Copy(),也可以创建System.IO.BinaryReader和System.IO.BinaryWriter并手动创建文件的副本读取锁定文件的块并将其写入新文件。我已经看到了一种方法是可能的,但另一种方法不是,基于文件被锁定的原因。
这是“所有.NET”的答案。