C#でファイルの排他制御の動作確認用プログラム。
FileShareの使い方のサンプルです。
using System;
using System.IO;
namespace sample
{
class Program
{
static void Main(string[] args)
{
File.WriteAllText("aaa.txt", "sample");
// 読み込み中に書き込み可能
Console.WriteLine("------------------");
Console.WriteLine("FileShare.ReadWrite");
using (FileStream stream = new FileStream("aaa.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
using (new StreamWriter("aaa.txt", true))
{
Console.WriteLine("OK write");
}
using (new StreamReader("aaa.txt"))
{
Console.WriteLine("OK read");
}
}
// 読み込み中に読み込み可能
Console.WriteLine("------------------");
Console.WriteLine("FileShare.Read");
// FileStreamのデフォルトはFileShare.Read
using (FileStream stream = new FileStream("aaa.txt", FileMode.Open, FileAccess.Read))
{
using (new StreamReader("aaa.txt"))
{
Console.WriteLine("OK read");
}
try
{
using (new StreamWriter("aaa.txt", true))
{
Console.WriteLine("OK write");
}
}
catch (IOException ex)
{
Console.WriteLine("NG write");
}
}
// 読み込み中に読み込み可能
Console.WriteLine("------------------");
Console.WriteLine("FileShare.Write");
// FileStreamのデフォルトはFileShare.Read
using (FileStream stream = new FileStream("aaa.txt", FileMode.Open, FileAccess.Read, FileShare.Write))
{
using (new StreamWriter("aaa.txt", true))
{
Console.WriteLine("OK write");
}
using (new StreamWriter("aaa.txt", true))
{
Console.WriteLine("OK read");
}
}
}
}
}