using System.IO;
{
FileStream f = new FileStream( "d:/test.txt", FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite );
StreamWriter s = new StreamWriter( f );
s.WriteLine("aaa");
s.WriteLine("bbb");
s.Flush();
}
___
■ ロック(Lock)
{
FileStream f = new FileStream( "d:/test.txt",
FileMode.Create,
FileAccess.ReadWrite,
FileShare.ReadWrite
);
StreamWriter s = new StreamWriter( f );
s.WriteLine("aaa");
s.WriteLine("bbb");
s.Flush();
// ファイル全体をロックする
f.Lock(0, f.Length);
// 何か長い処理をする。
// ロック中は他のプロセスはアクセスできない。
// プロセスはファイルにアクセスできません。別のプロセスが使用中です。
Thread.Sleep( 30 * 1000 );
f.Unlock(0, f.Length);
}
// ロックをすることで、他のプロセス(コード)からアクセスすると IOException が発生する。
f.Lock(0, f.Length);
FileStream f2 = new FileStream( "d:/test.txt", FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite );
StreamWriter s2 = new StreamWriter( f2 );
s2.WriteLine("aaa");
s2.WriteLine("ccc");
// 厳密には Write() で追加したバッファの内容がファイルへ転送した瞬間におきる。
s2.Flush();
s2.Close();