現在ロックされているファイルをコピーするための API 呼び出しは何ですか。.Net を使用できることを望んでいますが、Win32 呼び出しも問題ありません。
Unix やその他の OS でのほぼ同じ機能について、気軽に声をかけてください。
この目的には、VSS (Visual SourceSafe ではなく、ボリューム シャドウ コピー サービス) API を使用できます。これは強力ですが、使いやすい API ではありません。「VSS でのバックアップの処理の概要」を読めば、何が関係しているかがわかります。
これは比較的最近の API ですが、VSS の .NET サポートはほとんど (そして言い訳がつかないことに) 存在しません。ほとんどの API を Interop 経由で呼び出すことはできず、フレームワーク ファイル関数は、VSS がスナップショット ファイルを公開するために使用するカーネル名前空間では機能しません。おまけに、32/64 ビットと XP 対 Vista の恐ろしい問題があり、展開も刺激的です (Microsoft の担当チームは本当に誇りに思うべきです!)
とにかく、AlphaVSSプロジェクトは完全な VSS 機能を .NET にもたらすことを意図しており、まだプレベータ段階ですが、非常に有望に見えます。ただし、それはあなたのためにトリックを行うかもしれません。それはオープン ソース (Managed C++) です。
Win32 を使用して物事を行う方法の良い例については、HoboCopyを参照してください。このユーティリティは単独でも非常に便利で、完全な C++ ソースもSourceForge プロジェクト ページから入手できます。
別の質問に対する私の答えとほぼ同じです:
Win32 を使用している場合、これを行う公式の方法は、再起動時に移動するようにマークし、ユーザーに再起動を依頼することです。再起動時に移動するファイルをマークするにMoveFileEx
は、MOVEFILE_DELAY_UNTIL_REBOOT
フラグとともに使用します。
これは同じ関数ですが、今回は宛先として NULL を渡しません。
ファイルを正確にロックしたものに応じて、System.IO.File.Copy() を実行するか、System.IO.BinaryReader と System.IO.BinaryWriter を作成し、チャンクを読み取ってファイルのコピーを手動で作成できます。ロックされたファイルを新しいファイルに書き込みます。ファイルがロックされた理由に基づいて、一方の方法は可能でしたが、もう一方の方法は不可能だったという状況を見てきました。
これが「すべて.NET」の答えです。