【C#】オープン中のファイルにアクセスしたい ~FileShare.ReadWrite~

■ 問題点

 StreamReaderクラスやStreamWriterクラスでは、オープン中のファイルにアクセスすると、
例外・IOException「別のプロセスで使用されているため、プロセスはファイル~にアクセスできません。」
が発生する。

■ 対処方法

 * FileShare.ReadWriteを使用する

■ 用途

 * ログファイルの書き出し(特に、複数モジュールを共有して、ログ出力している場合)

※とりあえず、他ユーザがファイルを開いてたとしても、ファイルの内容を参照したい場合に使用すると良さそう。

■ 注意点

http://www.atmarkit.co.jp/fdotnet/dotnettips/707shareread/shareread.html
曰く...

 * パラメータ設定だけでどんなオープン中のファイルでも読み込みが行えるわけではない

■ サンプル

* OpenFileDialogを追加しておいて下さい
private void button1_Click(object sender, EventArgs e)
{
    var result = this.openFileDialog1.ShowDialog();
    if (result != DialogResult.OK)
    {
        return;
    }

    try
    {
        using (FileStream fs = new FileStream(this.openFileDialog1.FileName,
            FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
        using (TextReader sr =
                new StreamReader(fs, Encoding.GetEncoding("shift-jis")))
        {
            string line;
            var output = string.Empty;
            while ((line = sr.ReadLine()) != null)
            {
                output += line + Environment.NewLine;
            }
            this.label1.Text = output;
        }
    }
    catch (Exception ex)
    {
        this.label1.Text = ex.Message;
    }
}


関連記事

C#】ファイルの読み書き ~ StreamWriter / StreamReader ~

https://blogs.yahoo.co.jp/dk521123/20151544.html

C#】ごっそりTextファイルにデータ入出力する ~ ReadAllText / WriteAllText ~

https://blogs.yahoo.co.jp/dk521123/20151616.html