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

.net 如何以编程方式复制在windows下锁定的文件或文件夹?,.net,winapi,file,locking,.net,Winapi,File,Locking,复制当前锁定的文件的API调用是什么。我希望能够使用.Net,但是Win32调用也可以 请随时在Unix或任何其他操作系统上插入相同的功能。几乎与我的回答相同: 如果您使用的是Win32,官方的做法是将其标记为在重新启动时移动,并要求用户重新启动。要在重新启动时标记要移动的文件,请使用带有MOVEFILE\u DELAY\u UNTIL\u reboot标志的MoveFileEx 这是同一个函数,只是这次您没有将NULL传递为目标。为此,您可以使用VSS(卷影复制服务,而不是Visual Sou

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


请随时在Unix或任何其他操作系统上插入相同的功能。

几乎与我的回答相同:

如果您使用的是Win32,官方的做法是将其标记为在重新启动时移动,并要求用户重新启动。要在重新启动时标记要移动的文件,请使用带有
MOVEFILE\u DELAY\u UNTIL\u reboot
标志的
MoveFileEx

这是同一个函数,只是这次您没有将NULL传递为目标。

为此,您可以使用VSS(卷影复制服务,而不是Visual SourceSafe)API。虽然功能强大,但这并不是一个易于使用的API:它应该让您了解其中所涉及的内容

尽管它是一个相对较新的API,.NET对VSS的支持几乎不存在(而且不可原谅)。您不能通过互操作调用大部分API,而且框架文件函数也不能与VSS用于公开快照文件的内核命名空间配合使用。作为奖励,还有可怕的32/64位和XP与Vista的问题,这也让部署变得令人兴奋(微软负责的团队应该感到非常自豪!)

无论如何,该项目打算将完整的VSS功能带到.NET中,看起来非常有希望,尽管它仍处于测试前阶段。不过,它可能会为您带来好处,而且它是开源的(托管C++)


有关如何使用Win32执行操作的示例,请参阅。该工具本身非常有用,并且完全C++源也可以从../p>中得到,这取决于您的文件究竟是什么锁,您可以同时使用Soal.IO文件.FIX()。或者创建System.IO.BinaryReader和System.IO.BinaryWriter,并通过读取锁定文件的块并将其写入新文件来手动创建文件副本。根据文件被锁定的原因,我见过一种方法可行,而另一种方法不可行的情况

这就是“all.NET”的答案