サーバ上のファイルをバックアップしようとしていますが、一部は使用中でオープンできません。代わりに、現在のコピーが使用中の場合は、シャドウコピーを開きたいと思います。これどうやってするの?現在のコピーを使用している場合は、ファイルのシャドウコピーを開く
参考までに、私はC#.net 3.5を使用しています。
サーバ上のファイルをバックアップしようとしていますが、一部は使用中でオープンできません。代わりに、現在のコピーが使用中の場合は、シャドウコピーを開きたいと思います。これどうやってするの?現在のコピーを使用している場合は、ファイルのシャドウコピーを開く
参考までに、私はC#.net 3.5を使用しています。
実際にはわかりませんが、次のチャンネル9ビデオがあります。
Windows Vista "Time Warp": Understanding Vista's Backup and Restore Technologies
いくつかの実装の詳細と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);
私の答えはあなたに多くの使用であってもよいが、SO Qされていない可能性がありますので、この質問は、すでにかなり古いです&サイトはおそらく他の人を助けるかもしれません。あなたがのためにボリュームシャドウサービスプロバイダを経由して、ボリュームシャドウコピーを作成
:
私は/実装全体を鎮圧したくないことはできませんが、手順がある。このような何かを行きますドライブを探してください(これはMSDNに詳しく記載されています。また、これらのシャドウコピーを作成するサンプルクライアントがあり、これで十分でしょう)。
永続的なものを作成するか、 「コールバック」メカニズム(アプリ呼び出し)
オープンUNCパスとのCreateFileを経由して目的のファイル(UNCは、このようなものになります? \\ \ GLOBALROOT \デバイス\ HarddiskVolumeShadowCopyXZY \ yourpathの\のyourfile.yourextensionを)
は、ファイル
でやりたいです詳細終わった後、あなたはそれを削除するには、サンプルのクライアントを使用する必要があります。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しか読みません。 – Malfist
私は、ファイルをロックしているプロセスを制御できません。 – Malfist