2012-07-03 22 views
12

私のやりたいことは、私のプログラムがファイルを使用している間に、ファイルの名前を変更、削除、移動しないようにしたいということです。移動はWindows FileSystemWatcherに従って別の場所にある削除と作成ですが、私は逃げ出します)。ファイルの削除、移動、名前の変更を防止する

FileStream.Lockを使用するか、Mutexを使用することが推奨されています。しかし、FileStream.Lockは、私が許可しようとしているのファイルが変更されないようにするためのみたいです。また、私は非常に確かにmutexがファイルをロックすることができますが、私はまだ.Net 4.0ライブラリでそれを読んでいます。

誰かがこの問題のコードベースの解決策がある場合、いずれかを利用する上でアドバイスを持っていますか?

+0

これは非常に珍しいユースケースのように聞こえます。私はあなたがこのような状況で自分を見つけたのかどうか不思議です...もっと説明するのに気をつけますか?おそらくアーキテクチャ上の解決策があります。 – JDB

答えて

19

ファイルを開くときに、共有モードを指定できます。

FileAccess.Readでファイルを開くと、ファイルを読み取ることができますが、FileShare.ReadWriteではファイルを編集し続けますが、削除や移動はできません。これは、移動または削除ファイルが、読み取りおよび書き込み可能防止する

var fs = File.Open(@"C:\temp\file.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); 
MessageBox.Show("File Locked"); // While the messagebox is up, try to open or delete the file. 
// Do your work here 
fs.Close(); 
+0

うわー、これはファイルの名前を変更することさえ禁止します。ありがとう、これは私が思ったよりもうまくいく、それはMicrosoft Boxesを投げるので:D –

3

using (FileStream fs = new FileStream(@"C:\TestDir\Test.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) 
    { 
     // Do Stuff. 
    } 

FileStream.Lockは実際にロックされている間、ファイルの特定の部分の変形を防止する範囲ロックであります開催されました。

+1

+1最初の正解。 – JDB

+0

FTR @JohnKoernerは3分早く解決しました。 –

0

あなたはすべてをロックしたい場合は(...、移動いけない、いけない、削除、書き込みいけない、読んではいけない)
オープンのStreamWriter

StreamWriter sw = new StreamWriter(path); 
関連する問題