14

私がやろうとしているのは、プログラムがファイルを使用している間、ユーザーがファイルの名前を変更、削除、または移動できないようにすることです (まあ... Windows によると、移動は削除と別の場所での作成です) FileSystemWatcherですが、余談です)。

FileStream.Lockを使用するか、Mutexを使用することが提案されています。ただし、 FileStream.Lock は、許可しようとしているファイルが変更されるのを防ぐだけのようです。また、.Net 4.0 ライブラリでまだファイルを読んでいますが、ミューテックスがファイルをロックできるかどうかについては非常に確信が持てません。

この問題に対するコードベースの解決策があるかどうか、どちらかを利用することについて誰かアドバイスはありますか?

4

2 に答える 2

22

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

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();
于 2012-07-03T20:32:40.580 に答える
3

これにより、ファイルの移動や削除は防止されますが、読み取りと書き込みは可能になります。

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

FileStream.Lockは、実際には範囲ロックであり、ロックが保持されている間、ファイルの特定の部分が変更されるのを防ぎます。

于 2012-07-03T20:43:46.867 に答える