繁体   English   中英

如何以编程方式复制在Windows下锁定的文件或文件夹?

[英]How do I copy a file or folder that is locked under windows programmatically?

什么是API调用来复制当前锁定的文件。 我希望能够使用.Net,但Win32调用也没问题。

请随意在Unix或任何其他操作系统上使用相同的功能。

您可以使用VSS(卷影复制服务,而不是Visual SourceSafe)API来实现此目的。 虽然功能强大,但这并不是一个易于使用的API: 在VSS下处理备份概述可以让您了解所涉及的内容。

即使它是一个相对较新的API,但对VSS的.NET支持几乎(并且不可原谅地)不存在。 您无法通过Interop调用大多数API,并且Framework文件函数将无法与VSS用于公开快照文件的内核命名空间一起使用。 作为奖励,有可怕的32/64位和XP-vs-Vista问题,部署也令人兴奋(微软的负责团队应该感到非常自豪!)

无论如何, AlphaVSS项目打算为.NET带来完整的VSS功能,看起来非常有前景,尽管它还处于测试前阶段。 它可能只是为你做的,它是开源的(Managed C ++)。

有关如何使用Win32执行操作的一个很好的示例,请参阅HoboCopy 该实用程序本身非常有用,并且SourceForge项目页面也提供了完整的C ++源代码。

几乎与我对另一个问题的回答相同:

如果您使用的是Win32,那么正式的方法是将其标记为在重新启动时移动,并要求用户重新启动。 要在重新引导时标记要移动的文件,请使用带有MOVEFILE_DELAY_UNTIL_REBOOT标志的MoveFileEx

它是相同的功能,只是这次你没有传递NULL作为目的地。

根据确切锁定文件的内容,您可以执行System.IO.File.Copy(),也可以创建System.IO.BinaryReader和System.IO.BinaryWriter,并通过读取块来手动创建文件的副本。锁定的文件并将它们写入新文件。 我已经看到了一种方法是可能的,但另一种方法不是,基于文件被锁定的原因。

这是“所有.NET”的答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM