これまでのところ、私はすべて成功しなかった。C#はロックされたファイルを読み取った
私が達成しようとしているのは、特定の時間ファイルを開いてロックしたいということです。 ファイルを開いてロックした直後に、読み込み専用に同じファイルを開こうとします。
string filePath = "test.ini";
// Open and lock the file
FileStream configurationFile = new FileStream(filePath, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);
configurationFile.Lock(1, configurationFile.Length);
// Open the same file just to read it
using (FileStream bufferStream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
using (StreamReader sr = new StreamReader(bufferStream))
{
string line;
while ((line = sr.ReadLine()) != null) // <--- Here I get the error
{
CustomMessageBox.Show(line);
}
}
}
)(私は実際のFileStreamとStreamReaderを使用してファイルを開くことができますが、それは、例えば、sr.ReadLine用でのStreamReaderを使用するために来るとき、それは、ファイルが別のプロセスで使用中であることを、例外がスローされます。
ここで言及したように、Reading a file used by another process [duplicate] FileShare属性はReadWriteでなければなりませんが、これは役に立ちませんでした。
また、私はStreamReader(bufferStream, Encoding.*)
のような利用可能なエンコードを試しましたが、どちらもうまくいきませんでした。
私は見落としているものがありますか?
これは、管理機能がラップされ、(https://msdn.microsoft.com/library/windows/desktop/aa365202)[ 'LockFile'で文書化]されています。"ロックプロセスがファイルをもう一度開くと、領域をロック解除するまで、この2番目のハンドルを通じて指定された領域にアクセスすることはできません。最初のストリームは、読んだり読んだりするために使う必要があります。 –
読み込みを許可しながら、ファイルを書き込み用にロックしたいと思っていますか?その場合、これはhttps://stackoverflow.com/q/3279071/120955の複製ですか? – StriplingWarrior
とにかくファイル全体をロックしようとしているので、Lockを使用する代わりにFileShare.Noneで開くことができます。 – Evk