|
分類:[C#]
環境は Windows Server 2003 + .NET Framework 3.5 + C#です。
ふたつのプロセスから同じファイルにアクセスするプログラムを作成しています。
片方のプロセスは頻繁に書き込みを行います。
もう片方のプロセスは頻繁に読み込みを行います。
非同期です。
当然、ファイルロックの問題があるので、FileShareの指定をしています。
簡単なサンプルを作ってみて、同時アクセスによるExceptionが発生しないことは確認しています。
しかし、実際にふたつのプロセスからアクセスしてみると、以下のエラーが発生します。
「別のプロセスで使用されているため、プロセスはファイル 'path\to\hoge.txt' にアクセスできません。」
何か、FileShareの設定の間違いがあるでしょうか。
また、他の原因でこのようなエラーが発生することがあるでしょうか。
【Stack Traceの一部(書き込み側)】
場所 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
場所 System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy)
場所 System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share)
【書き込み側】
FileStream fs = new FileStream(filepath, FileMode.Create, FileAccess.ReadWrite, FileShare.Read);
StreamWriter sw = new StreamWriter(fs, Encoding.GetEncoding("Shift_JIS"));
【読み込み側】
FileStream fs = new FileStream(filepath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
StreamReader sr = new StreamReader(fs, Encoding.GetEncoding("Shift_JIS"));
|