如果当前副本正在使用中,则打开文件的卷影副本

Mal*_*ist 7 c# shadow-copy .net-3.5

我正在尝试在服务器上备份文件,但其中一些正在使用中,无法打开.相反,如果当前副本正在使用中,我想打开它们的卷影副本.我怎样才能做到这一点?

作为参考,我使用的是C#.net 3.5.

Tom*_*Tom 9

这个问题已经很老了,所以我的答案对你来说可能没什么用处,但是作为一个问答网站可能它仍然可以帮助别人.

我不能/不想放下整个实现,但程序是这样的:

  1. 您可以通过卷影服务提供程序为要读取的文件所在的驱动器创建卷影复制(这在MSDN上有详细记录,还有一个示例客户端可以创建这些卷影副本,很可能对您来说已足够)

  2. 要么是持久的,要么使用"回调"机制(调用你的应用程序)

  3. 通过UNC路径和CreateFile打开所需的文件(UNC看起来像这样:\\?\ GlobalRoot\Devices\HarddiskVolumeShadowCopyXZY\yourpath\yourfile.yourextension)

  4. 用文件做任何你想做的事

  5. 如果您创建了持久性VSC,则应在完成后使用示例客户端将其删除

更多信息:http://technet.microsoft.com/en-us/library/cc785914%28WS.10%29.aspx 和这里:http://msdn.microsoft.com/en-us/library/bb968832% 28VS.85%29.aspx

  • 问题是.NET的内置文件管理工具无法访问\\?\ GlobalRoot指令.你实际上必须下降到winapi级别.有一个名为AlphaFSS的库可以,但它有一些主要问题.我使用了一段时间但遇到了文件大小问题,两个DWORD代表它的大小,AlphaFSS只读取较低的DWORD. (2认同)

Dan*_*ner 2

我实际上无法判断,但有以下第 9 频道的视频。

Windows Vista“时间扭曲”:了解Vista的备份和恢复技术

其中有一些实现细节以及一些有关 API 结构的信息。我相信记住他们提到了卷影副本如何映射到文件系统中。