こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ファイルの排他制御について

こんにちは。

Visual Studio 2005 のC#を使って、ファイルを加工するアプリを書いていますが、
ファイルの排他制御についてよく分らなくて困っています。

プログラムの構成としては、以下の通りです。
1:プログラムAがファイルXYZを作成します。
2:プログラムAとは別々に動く、プログラムBが、このファイルXYZを読み込んで
データベースに書込む処理をします。

この処理で、もしもプログラムAがファイルXYZの作成中の時に、
プログラムBが同じタイミングでファイルXYZを開いてしまった場合、
ファイルが中途半端な状態で開いてしまうのではないかと思ってます。

こういう状態を回避するためにはどういう処理にすればよいのでしょうか?

よろしくお願いいたします。

投稿日時 - 2009-02-03 13:42:03

QNo.4685622

すぐに回答ほしいです

質問者が選んだベストアンサー

こちらを参考にされてはどうでしょう。

参考URL:http://www.atmarkit.co.jp/fdotnet/dotnettips/284watchopen/watchopen.html

投稿日時 - 2009-02-03 16:40:25

お礼

ありがとうございます。
参考になりました。

投稿日時 - 2009-02-07 00:29:27

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(3)

ANo.2

フラグ制御してみたら?
ファイルXYZの先頭にSTATUSを持つ。
プログラムAがXYZ作成時にSTATUSに’WRITING'と書いて、終了後に’READOK'と書く。
プログラムBはSTATUSが’READOK'になるまで待ち合わせて(n秒間隔でforとかwhileで)書くようにすればOKだと思います。
プログラムBがSTATUSが’READOK'と判断した後に’READING’として、プログラムAはSTATUSが’READING’の時は書き込まないとすると尚ベターだと思います。(プログラムBは処理終了時点でSTATUSを’READOK’に戻す必要があります)

投稿日時 - 2009-02-03 14:18:16

お礼

ありがとうございます。
こういうやり方も覚えておきます。

投稿日時 - 2009-02-07 00:30:23

AでFileShare.Noneを指定してファイルを開く
Bは開けるようになるまで待つ

投稿日時 - 2009-02-03 13:54:16

お礼

ありがとうございます。
このやり方を覚えておこうと思います。

投稿日時 - 2009-02-07 00:31:44

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-