0

XML ファイルを開いて編集する WPF アプリがあります。現在、アプリは複数回起動でき、複数のインスタンスで同じファイルを開くことができます。ファイルが開いているときに、アプリの別のインスタンスがファイルを開くことができないように、ファイルをロックする必要があります。ファイルを開くときに FileShare.None 属性と FileStream.Lock() を使用しようとしましたが、何らかの理由で、アプリの別のインスタンスがファイルを開くのを防ぐことができません。

編集:関連コード

try
{
    FileStream iStream = File.Open(fileName, FileMode.Open, FileAccess.ReadWrite, FileShare.None);
    iStream.Lock(0, iStream.Length);

    // DO STUFF WITH FILE HERE
}
catch (System.IO.IOException ioException)
{
    // Raise exception to higher level, where application will terminate. 
    throw (ioException);
}
4

1 に答える 1

0

編集を開始してから閉じるまで、ファイルを「編集」している間は常にファイルを開いたままにしておく必要があります(アプリのインスタンスごとに個別のプロセスがあると仮定します)。

コードは、メソッド内でファイルを開いているように見え、短いファイル操作に推奨されるように「使用」を使用するか、GC にファイルを閉じさせることによって、このメソッド内でファイルを閉じる可能性があります。その結果、ファイルをしばらくロックしますが、他のインスタンスが再び開くことができるようにすぐに解放します。

アプリケーションがある種の単一インスタンス アプローチを実装している場合、すべてのオープン操作が同じプロセスから実行されるため、このロックでは不十分な場合があることに注意してください。

于 2011-03-31T02:33:27.773 に答える