13

現在ロックされているファイルをコピーするための API 呼び出しは何ですか。.Net を使用できることを望んでいますが、Win32 呼び出しも問題ありません。

Unix やその他の OS でのほぼ同じ機能について、気軽に声をかけてください。

4

3 に答える 3

17

この目的には、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 プロジェクト ページから入手できます。

于 2008-11-03T17:17:09.053 に答える
5

別の質問に対する私の答えとほぼ同じです:

Win32 を使用している場合、これを行う公式の方法は、再起動時に移動するようにマークし、ユーザーに再起動を依頼することです。再起動時に移動するファイルをマークするにMoveFileExは、MOVEFILE_DELAY_UNTIL_REBOOTフラグとともに使用します。

これは同じ関数ですが、今回は宛先として NULL を渡しません。

于 2008-11-03T16:55:28.753 に答える
4

ファイルを正確にロックしたものに応じて、System.IO.File.Copy() を実行するか、System.IO.BinaryReader と System.IO.BinaryWriter を作成し、チャンクを読み取ってファイルのコピーを手動で作成できます。ロックされたファイルを新しいファイルに書き込みます。ファイルがロックされた理由に基づいて、一方の方法は可能でしたが、もう一方の方法は不可能だったという状況を見てきました。

これが「すべて.NET」の答えです。

于 2008-11-03T17:23:30.023 に答える