当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如果当前副本正在使用中,则打开文件的卷影副本》经验,为你挑选了1个好方法。

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

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



1> Tom..:

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

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

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

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

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

    用文件做任何你想做的事

    如果您创建了持久性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.
推荐阅读
围脖上的博博_771
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有