続柄チャートSystem.Windows.Forms.Timerと、System.Threading.Timerの違い

2009年05月04日

書き込み用にファイルをオープンしているとき、通常そのファイルはロックされている。そのロック中のファイルを読み込みたい時があると思う。
.NET Frameworkでそれを行う方法を以下に示す。なお、以下の例として示すのはテキストファイルを対象としたものである。

通常、.NETでテキストファイルの書き込みをするときにはStreamWriterクラスを使う。
こんな感じかな? サンプルプログラムなんで、try〜catchは省略している。


StreamWriter sw = new StreamWriter(<書込ファイル名フルパス>);
sw.Write(<書き込みたいテキスト>);
sw.Flush();


sw.Close();でStreamを閉じても書き込みは行われるけど、ファイルをオープンした状態で
書き込みを実行したいとこにはFlush()メソッドを用いる。

ここで問題になるのは、上記のプログラムで開いたままのファイルを読み込みたいとき。
テキストファイルの読み込みには、StreamReaderクラスを用いるが、以下に示すような
よくあるStreamReaderクラスのサンプルプログラムの書き方では読み込めない。

StreamReader sr = new StreamReader(<StreamWriterで開いたファイルをフルパス指定>);
string readText = sw.ReadToEnd();


上記のプログラムを、StreamWriterで書込オープンしたテキストファイルに対して実行すると、ファイルオープン時にエラーが出る。
これを読み取り専用でオープンするには、FileStreamクラスをStreamReaderクラスと併用して使うようにする。具体的には以下のような感じ。


FileStream fs = new FileStream(<ロック中のファイルをフルパス指定>, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
StreamReader sr = new StreamReader(fs);
string readText = sr.ReadToEnd();


<ロック中のファイルをフルパス指定>の部分に、上記の例で示したStreamWriterで開いたファイル名をフルパス指定して実行してみると、読み取り専用で開けることが確認できる。


mshibuya19750510 at 17:35│Comments(0)TrackBack(0) .NET 

トラックバックURL

コメントする

名前
 
  絵文字
 
 
続柄チャートSystem.Windows.Forms.Timerと、System.Threading.Timerの違い