技術をかじる猫

適当に気になった技術や言語、思ったこと考えた事など。

他のプロセスで使ってるファイルを読む

WindowsUpdate.log を読み込んで日付時刻、終了コード引っこ抜けという課題があったので、.NET でやって食った。
そのときのコードがこんな感じ。

string windowsSystemDir = Environment.GetFolderPath(Environment.SpecialFolder.Windows);
string filePath = windowsSystemDir + "\\WindowsUpdate.log";

using (StreamReader reader = new StreamReader(filePath))
{
    // something code.
}

そして、結果が。

別のプロセスで使用されているため、プロセスはファイル 'C:\Windows\WindowsUpdate.log' にアクセスできません。

とIOException発生っと。読み取り専用のストリームなんだからいいだろーとか思うんだけど、StreamReader はその辺ダメみたい。
代わりに、FileStream を経由すると、読み取りは問題なくいけた。

using (FileStream fileStream = new FileStream(
    filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
    using (StreamReader reader = new StreamReader(fileStream))
    {
        detectLines(reader);
    }
}

しっかしこれもどうなのやら、、、、。