2012年6月29日金曜日

ファイルの排他制御のサンプル

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");
                }
            }
        }
    }
}

0 件のコメント:

ラベル