C# 打开文件';s卷影副本(如果当前副本正在使用)
我正在尝试备份服务器上的文件,但其中一些文件正在使用中,无法打开。相反,如果当前副本正在使用,我希望打开它们的卷影副本。我该怎么做C# 打开文件';s卷影副本(如果当前副本正在使用),c#,.net-3.5,shadow-copy,C#,.net 3.5,Shadow Copy,我正在尝试备份服务器上的文件,但其中一些文件正在使用中,无法打开。相反,如果当前副本正在使用,我希望打开它们的卷影副本。我该怎么做 作为参考,我使用的是C#.net 3.5。实际上我说不出来,但下面是第9频道的视频 这里有一些实现细节和一些关于API结构的信息。我相信您还记得,他们提到了卷影副本是如何映射到文件系统的。如果您可以控制第一个进程,则可以指定文件句柄共享类型 string contents1; string contents2; using (FileStream fs1 = ne
作为参考,我使用的是C#.net 3.5。实际上我说不出来,但下面是第9频道的视频
这里有一些实现细节和一些关于API结构的信息。我相信您还记得,他们提到了卷影副本是如何映射到文件系统的。如果您可以控制第一个进程,则可以指定文件句柄共享类型
string contents1;
string contents2;
using (FileStream fs1 = new FileStream("test.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
using (var tr1 = new StreamReader(fs1))
{
using (FileStream fs2 = new FileStream("test.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
using (var tr2 = new StreamReader(fs2))
{
contents2 = tr2.ReadToEnd();
contents1 = tr1.ReadToEnd();
}
}
}
}
Console.WriteLine(contents1);
Console.WriteLine(contents2);
这个问题已经很老了,所以我的答案可能对你没有多大用处,但作为一个问答网站,它可能仍然对其他人有帮助 我不能/不想写下整个实现,但过程是这样的:
这里:我无法控制锁定文件的进程。问题是.NET的内置文件管理工具无法访问\\?\GlobalRoot指令。实际上,您必须降到winapi级别。有一个名为AlphaFSS的库可以,但它有一些主要问题。我用了一段时间,但遇到了文件大小的问题,需要两个DWORD来表示它的大小,AlphaFSS只读取较低的DWORD。我知道这是一个旧线程。。。但是.Net 4.62及以上版本确实支持\\?\前缀