如何调用API复制当前被锁定的文件。我希望能使用.Net,不过Win32 API也可以接受。
欢迎讨论Unix或其他操作系统上相同的功能。
和我回答另一个问题的答案几乎一样:
如果你在Win32上,官方的方法是将其标记为在重启时移动,并要求用户重新启动。要将文件标记为在重启时移动,请使用MoveFileEx
并使用MOVEFILE_DELAY_UNTIL_REBOOT
标志。
这是相同的函数,只是这次你不会像目标传递NULL。
根据您的文件被锁住的原因,您可以使用System.IO.File.Copy(),或者创建一个System.IO.BinaryReader和一个System.IO.BinaryWriter并手动读取文件块并将它们写入新文件来创建副本。根据文件锁定的原因,有时可能只能使用其中一种方法。
这是完全使用.NET的解决方案。