2017-10-17 15 views
0

ハードドライブを定期的(スケジュール上)にバックアップ/フォーマットするプログラムを作成しています。フォーマット中、私はそれを取る第2の(同一の)ドライブを持っています。私がしたいのは、ドライブをフォーマットして(F:\と言う)、(この部分はオプションです...)F:\から他のドライブへのトラフィックをリダイレクトすることです(G:\と言う)。プログラムでCドライブでハードドライブをロックする

C#を使用してF:\ドライブを「ロック」して誰も読み書きできない方法がありますか?フォーマットを実行する直前に誰かがドライブに書き込もうとは思わない。今の私の目的のために、キーはドライブに書き込むことができないようにすることですが、私は完全なロック(読み書き)を好むでしょう。私はFile.Open(FullPath, FileMode.Open, FileAccess.ReadWrite, FileShare.None)を使用して他の人がそれにアクセスできないようにするファイルを知っています。ドライブに似たものはありますか?

これが可能な場合は、ボーナスとして、F:\からG:\へのトラフィックをリダイレクトできる方法がありますか? (G:\は、ほぼリアルタイムでF:\から複製されているので、ファイルパスでFをGに置き換えるだけでOKですが、プログラムで可能かどうかはわかりません)。

+0

は、フォーマット中にあなたがドライブに足すてみまし認識していませんよ?ドライブを「フォーマット」しないでください。 – dcg

+0

フォーマットするとドライブがアンマウントされます。バックアップとフォーマットの開始との間には短い時間があります(*リアルタイム*の近くにバックアップされます)。ドライブをロックしてバックアップを取ってから、バックアップとフォーマットの間で何かがバックアップされている間、またはそれ以上に悪化するリスクなしにフォーマットを開始するようにしています。 – BrianH

答えて

1

OP:誰がそれを書く/読むことができないように:\ドライブ

だから、私はFを「ロック」することができますC#を使用して方法はありますか?

はい、というわけではないのC#あなたがIOCTL FSCTL_LOCK_VOLUME

BOOL DeviceIoControl(
    (HANDLE) hDevice,   // handle to a volume 
    (DWORD) FSCTL_LOCK_VOLUME, // dwIoControlCode 
    NULL,      // lpInBuffer 
    0,       // nInBufferSize 
    NULL,      // lpOutBuffer 
    0,       // nOutBufferSize 
    (LPDWORD) lpBytesReturned, // number of bytes returned 
    (LPOVERLAPPED) lpOverlapped // OVERLAPPED structure 
); 

をP-呼び出すが、使用MSDNに必要になりますので:それが使用されていない場合

は、ボリュームをロックします。ロックされたボリュームは、そのボリュームをロックするファイルオブジェクト(* hDevice)のハンドルを通してのみアクセスできます。詳細については、この操作はの排他的アクセスを必要とするアプリケーションに便利です...備考セクション

を見る時間期間のボリュームから- 例えば、ディスクユーティリティとバックアッププログラム

OP:

...私はFからのすべてのトラフィックをリダイレクトすることができる方法があります:Gへ\:\?

私は

+0

F:ドライブの文字を変更し、次に「subst」F:Gを使用することができます。 –

+0

@ Jean-FrançoisFabreああ、良いアイディアです。私はいつか試してみる必要があります:) – MickyD

関連する問題