• ベストアンサー

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

こんにちは。 Visual Studio 2005 のC#を使って、ファイルを加工するアプリを書いていますが、 ファイルの排他制御についてよく分らなくて困っています。 プログラムの構成としては、以下の通りです。 1:プログラムAがファイルXYZを作成します。 2:プログラムAとは別々に動く、プログラムBが、このファイルXYZを読み込んで データベースに書込む処理をします。 この処理で、もしもプログラムAがファイルXYZの作成中の時に、 プログラムBが同じタイミングでファイルXYZを開いてしまった場合、 ファイルが中途半端な状態で開いてしまうのではないかと思ってます。 こういう状態を回避するためにはどういう処理にすればよいのでしょうか? よろしくお願いいたします。

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

  • ベストアンサー
  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.3

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

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

お礼

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

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

回答No.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’に戻す必要があります)

labrakun
質問者

お礼

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

全文を見る
すると、全ての回答が全文表示されます。
noname#208124
noname#208124
回答No.1

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

labrakun
質問者

お礼

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

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 関数内の排他制御について

    いつも的確な回答に助けられていますm( __ __ )m 以下のようなメソッドがあるとします。 function test() { 処理1: データベースから値を取得 処理2: 処理1 で取得した値に +1 する 処理3: 処理2 の結果をデータベースに書き込む } 【質問】 関数 test がクライアント A と B の2人からほぼ同時にアクセスされた時、以下のような事が起きてしまうと思います。 ・ A が 処理1 を実行 ・ A が 処理2 を実行 ・ B が 処理1 を実行 ・ A が 処理3 を実行 ・ B が 処理2 を実行 ・ B が 処理3 を実行 当然データベースにある値は期待通りの値ではないと思います。 期待する動きとしては、A が関数 test の全ての処理を抜けるまで B は入り口で待機させるというようなことを想像しているのですが、 こういった場合、どのように排他制御したら良いのでしょうか? 私は C# で排他制御を実装した経験があるのですが、 C# では同期オブジェクトを用意して lock を使ったり、 ManualResetEvent などを用いることで排他制御が可能でした。 PHP でそれらに匹敵するようなものは存在するのでしょうか?

    • 締切済み
    • PHP
  • 排他制御について

    質問します。 VB.NETとSQLServer2000を使用して受発注処理を作成したいのですが、排他制御について今悩んでいます。 レコードロックの動作についてなのですが、Aさんが「A01」のデータをレコードロックでデータを画面に表示している場合に、Bさんも(別PCにて)同様にレコードロックで「A01」のデータを表示することは可能なのでしょうか?(取得できるのか) 何方かご教授お願い致します。

  • ACCESS97での排他制御について

    今、仕事の都合でACCESS97を利用して、排他制御のある システムを作成しようと試みているのですが、なかなか上手くいきません。 DB、APをネットワーク上に置き、共有するテーブルを、DB→APに リンクをはっている状態です。 様々なIT上で調べたのですが、どれもACCESS97で排他制御は不可能 といった内容のものしかありません。。 どうしても、不可能なのでしょうか?もし、何かご存知でしたら、教えて頂け ないでしょうか??

  • JDBCでのトランザクション・排他制御

    初めまして。 まだ初心者の身なのですが質問させてもらいます。 サーブレット・jspでJDBCを使いデータベースとの処理を行って簡単なショッピングサイトのようなものを作っています。 まずsetAutocomit() = falseでトランザクションを開始し データベースのUPDATEを行って、最後に確定する場合comit キャンセルする場合rollbackとしています。 しかし1人のユーザーがトランザクションを行っている場合に他のユーザーからアクセスされた場合にデータベースのトランザクション中の値を取ってきたいのですが、どうしてもトランザクションでUPDATEされる前の値になってしまうのです。 これを防止するのが排他制御というものだというのは分かったのですが 実際のやり方については、結構調べたのですがあまり載っていませんでした。 データベースはMySQLを使っています。 よろしければJDBCでの排他制御についてのアドバイス、もしくは詳しく説明されているサイトなどございましたら是非教えてください。 よろしくお願いします。

  • ファイルの排他について

    はじめまして。 初心者ですが、今非常に困っております。 RandomAccessFileを使用して、ファイルの排他をしたいのですが・・・。具体的に言うと、AがAAA.xmlをOPEN中にBがAAA.xmlをOPENしようとするとAがOPEN中なので、例外処理に飛ばしたいのです。いくら試みても例外処理に飛びません。 <例>(java version "1.3.1.05") try { raf = new RandomAccessFile("AAA.xml","rw"); // OPEN raf.writeBytes(111); // WRITE1 raf.writeBytes(222); // WRITE2 raf.writeBytes(333); // WRITE3 raf.writeBytes(444); // WRITE4 raf.writeBytes(555); // WRITE5 raf.close(); // CLOSE } catch(IOException e) { // 排他制御に失敗. リトライしたい System.out.println("別のプロセス?が使用中") }  心当たりのある方がいらしゃいましたら、ご協力お願い致します。

  • 排他モードで開けない

    こんにちは。 os:vista、office:2003です。 自分で作成したアクセスのmdbファイルに フォームを新規で作成しようとしたところ、 「現在、このデータベースは排他モードでアクセスしていません。 変更しても、後で保存できない可能性があります。」 となってしまいます。 なので排他モードで開こうと思い、 ファイル→開く→ファイルを選択→排他モードで開く をやっても 「他のユーザーがこのデータベースを開いているか、 排他モードで開く権限がないため。○○を排他モードで開くことはできません。 このデータベースを共有モードで開きます。」 となってしまい、結局フォームを作ることができません。 ・パソコンはインターネットとしか繋いでないです。(共有はしていない) ・mdbと同じフォルダ内にldbと言う拡張子のファイルがあり、鍵マークが付いています。これが原因でしょうか? 何かわかる方なんでもいいのでご回答よろしくお願いします。

  • batファイルにおけるファイルの排他チェック

    いつも助けてもらっています。 バッチファイルにて、 あるファイルの排他チェックは出来ますか? このバッチファイルは、システムを立ち上げてて 自動で処理を開始するのですが、 その処理で使用するファイルを 他のソフトで開かれている場合には、 処理を実行しないように制御を掛けたいためです。 インターネットで調べてみましたが、 うまく調べられなかったです。 OSは2000とXPです。 よろしくお願いいたします。

  • データベースに書き込むときの排他処理

    ASP3.0 IIS5.0 ASP初心者です。初心者の素朴な疑問なんですが、 ASPで、例えばWebページから入力された情報を、 Accessなどのデータベースに書き込むとき、 排他処理って必要ですよね? 一般的にどうやるのでしょうか? Application変数を使うのでしょうか? データベース自体に排他制御する機能があるのですか? よろしくお願いします。

  • 排他処理

    こんにちは。 定期的にperlスクリプトを動かしてファイルを作成し、http(Apache)でそのファイルを参照するシステムを作成中です。 このとき、作成中の中途半端なファイルを読まないようにしたいのですが、 どのようにするのがよいでしょうか? CGIスクリプトで掲示板等のファイルにアクセスする際の排他制御についてなら、いろいろと情報もあるのですが、今回のようなケースについてはどうも情報が見つかりませんでした。 単純にテンポラリファイルを作って最後にrenameするだけでもよさそうなのですが、どの程度確実なものでしょうか。 あるいはapacheの設定でなにかうまい方法があるのでしょうか? どなたかご存知でしたら、ご教示願います。 OSはSolarisです。よろしくお願いします。

    • 締切済み
    • CGI
  • Excelファイルのマクロによる排他制御

    A.xlsというExcelファイルの内容を更新するのですが。 更新しにいくのは、複数のExcelのマクロで作成したツールです。 その複数のツールから同時にA.xlsの更新にいくと当然タイミングによって更新内容が上書き等され壊れてしまいます。 そこで、お互いのツールで排他制御を行おうと思っているのですが、A.xlsを開くopen文での記述が解りません。 どなたか教えていただけないでしょうか。 使用している構文は、こんな感じです。 Workbooks.Open Filename:="A.xls" on errorで重複openのエラーになるかと思ったのですが、エラーになってくれず、重複エラーを検知できません。 よろしくお願いします。

このQ&Aのポイント
  • 印刷結果が良くないです。特に白黒印刷。網掛けの灰色など色むらがすごいです。これはもう処分するレベルでしょうか?まだトナーは沢山あります。
  • 印刷結果が悪く、特に白黒印刷で網掛けの灰色や色むらが目立ちます。現在のトナーの状態や処分の有無について知りたいです。
  • HL-3170CDWでの印刷結果が良くなく、特に白黒印刷で網掛けの灰色や色むらが多く出ています。処分するべきかどうか、トナーの在庫状況についても教えてください。
回答を見る

専門家に質問してみよう