する質問をすることでしか得られない、回答やアドバイスがある。studio2017、C#で複数の端末からファイルサーバー上の1つのファイルを読み書きするプログラムを作りたいと考えています。以下、質問の修正依頼があり、自分でもわかりにくい質問だったと思うので殆ど内容が変わっています。実現したいこと複数のPCから1つのファイル(情報)の読込み、変更ファイルの中身は1行で01,0,1,002,0,0,1...19,0,1,0のようなCSV形式になっており、[モノの番号,状態1,状態2,状態3]という具合です。モノは1から19まであります。ファイルは19個あります。状態は1か0で表し、1の場合はオン、0の場合はオフです。モノに対し3つのステータスがあり、それぞれのステータスのオン、オフがあります。このファイルの情報をもとに画面上の[モノ]の見た目を変化させています。ファイル01の中身が[01,1,0,0]だった場合、画面上のモノ01のステータス1がオン、2がオフ、3がオフといった具合です。この19個ファイルに対しての書込み、読込みを複数のPCから行いたいです。書込みは状態1、2、3、の[0か1か]を書き換えるだけ。読込みはファイルが書き換えられた時点で読込み、その情報をもとに画面上のモノの状態を変化させます。前提として、ファイルが書き換えられた時点でファイルを読み込む必要があるので、FileSystemWatcherを使って19個のファイルを監視しています。問題になっていること問題1ファイルの書き換えをした時点でFileSystemWatcherが働く。↓FileSystemWatcherのイベントでファイルを読み込みに行くが、別のプロセスが使用中とエラーが発生する。(おそらくですが、ファイルの書き換えがまだ終了していない。}ファイル書き換えのメソッドです。書き換える前の状態を知るために一度書き換えるファイルを読み込み、配列に入れます。引数をもとに、配列の中身を変更し、書き換えを行っています。usingでストリームを閉じているはずなのですが、読込み時にエラーが発生する場合があります。エラーが発生しない場合もあります。別のプロセスが使用中とエラーが発生する。こちらは先ほどの書き込みメソッドのCatch部分に”他の端末から操作している可能性があります。”とメッセージを表示しているのですが、できれば他の端末の処理が終わるまで自動で待ち、ファイルのアクセスが可能になった時点で操作を反映させたいと思っています。FileSystemWatcherが反応した時点で書き込みのストリームが閉じられていないので、イベントが発生した時点でスレッドを50ミリ秒止めています。することでエラーは発生しなくなりました。本当に書き込みのストリームが閉じられていないのが原因か分からない状況です。書込みメソッドのcatchの部分でもう一度書き込みメソッドを呼び出し、成功するまで永久ループをさせています。これではかなり危険だと思っていて何か他の方法がないかと探しています。ここでデータベースを用いることで排他制御ができるのではないかと思い、修正前の質問に至ります。データベース排他制御を使うことで問題2が解決できるのではないかと考えていますが、ファイルの情報量がかなり少ないですし、採用するほどのものなのかがわかりません。データベースにしてしまうと、ファイル監視ができなくなるのではないかと思い悩んでいます。この2つの問題を解決するにはどのような作りをすると良いと思いますか?皆様のご意見を参考にいろいろ試したいと思っています。attachmentクリップ0気になる質問をクリップするクリップした質問は、後からいつでもマイページで確認できます。クリップした質問に回答があった際、通知やメールを受け取ることができます。自分も答えを知りたい質問者以外のユーザにも役立つ評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。質問の評価を上げたことを取り消します低評価-評価を下げられる数の上限に達しました評価を下げることができません1日5回まで評価を下げられます1日に1ユーザに対して2回まで評価を下げられます質問の評価を下げるteratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。コメントをしてください。送信する質問の評価を下げる機能の利用条件この機能を利用するためには、以下の事項を行う必要があります。15:20正直、このような場でほんの少しの情報を元に手探りで全設計を終えられるものではないと思いますし、「プロセス」と聞いてハテナマークを浮かべ、なおかつ調べもしない人に作れるよう教えるのは大変困難です。解決しないと思いますので、プロにしかるべき経費を使って依頼した方がいいと思います。このような場でほんの少しの情報を元に手探りで全設計を終えられるものではないと思いますし、「プロセス」と聞いてハテナマークを浮かべ、なおかつ調べもしない人に作れるよう教えるのは大変困難です。解決しないと思いますので、プロにしかるべき経費を使って依頼した方がいいと思います。15:21本質問は作りたいものに対してどのような方法で作るのが良いのか?という意図で質問しました。リンクの質問はベストアンサーに選ばせていただきましたが、トリガーをもう一度起こしてもらう。リトライ処理の抜け方を変更することで解決しました。本質問は作りたいものに対してどのような方法で作るのが良いのか?という意図で質問しました。リンクの質問はベストアンサーに選ばせていただきましたが、トリガーをもう一度起こしてもらう。リトライ処理の抜け方を変更することで解決しました。15:23どのような方法が良いか考えるには詳しい情報が必要ですが、その情報をここで出せるとは思えません。どのような方法が良いか考えるには詳しい情報が必要ですが、その情報をここで出せるとは思えません。15:24お叱りのお言葉ありがとうございます。お言葉ですがここの質問、回答で全てを解決しようとは思っていません。1つの意見、ヒントとして捉えているつもりです。申し訳ございませんが、私の質問が気に入らないようでしたら今後ご回答していただかなくて結構です。お叱りのお言葉ありがとうございます。お言葉ですがここの質問、回答で全てを解決しようとは思っていません。1つの意見、ヒントとして捉えているつもりです。申し訳ございませんが、私の質問が気に入らないようでしたら今後ご回答していただかなくて結構です。15:25もう一度読んでみてください。どのような方法が良いか考えるには詳しい情報が必要ですが、その情報をここで出せるとは思えません。一度読んでみてください。どのような方法が良いか考えるには詳しい情報が必要ですが、その情報をここで出せるとは思えません。15:26質問が気に入らないから叱られていると思っている時点であなたはこの質問が解決できません。質問が気に入らないから叱られていると思っている時点であなたはこの質問が解決できません。15:28情報の修正を求められるのが気に入らないなら質問していただかなくて結構です。情報の修正を求められるのが気に入らないなら質問していただかなくて結構です。15:29回答のほうにもありますが、確かに質問の内容が伝わりにくいと自分でも思いまいした。なにを実現したいのかを考え直し、質問を修正するつもりです。回答のほうにもありますが、確かに質問の内容が伝わりにくいと自分でも思いまいした。なにを実現したいのかを考え直し、質問を修正するつもりです。15:35すみません。質問の修正を求められているとは思いませんでした。修正が気に入らないわけではありません。先ほど回答のほうで質問をもっと詳しくしたほうが良いとの指摘がありましたので修正します。質問の修正を求められているとは思いませんでした。修正が気に入らないわけではありません。先ほど回答のほうで質問をもっと詳しくしたほうが良いとの指摘がありましたので修正します。15:44飛躍しました。修正を求めていませんでしたね。十分な修正は無理だからお金を払ってプロに丸投げするのがいいという提案でした。「提案がいやなら」と訂正します。修正されるということなので私からはこれ以上ありません。修正を求めていませんでしたね。十分な修正は無理だからお金を払ってプロに丸投げするのがいいという提案でした。「提案がいやなら」と訂正します。修正されるということなので私からはこれ以上ありません。16:59修正依頼をくださった方々すみませんでした。質問を修正させていただきました。不明な点がありましたらご指摘下さい。修正依頼をくださった方々すみませんでした。質問を修正させていただきました。不明な点がありましたらご指摘下さい。17:50同一ファイルの同一状態を変更する。いうことは十分にあり得ます。ファイル監視ができなくなると、ファイルが変更された時点でファイルの情報を読み込むイベントがなくなってしまうからです。同一ファイルの同一状態を変更する。いうことは十分にあり得ます。ファイル監視ができなくなると、ファイルが変更された時点でファイルの情報を読み込むイベントがなくなってしまうからです。13:55ファイル監視の理由はその通りです。ユーザーがファイルを変更するときは、モノの状態を知った上で変更をかけることを前提としています。ファイル監視の理由はその通りです。ユーザーがファイルを変更するときは、モノの状態を知った上で変更をかけることを前提としています。件sort評価が高い順sort新着順sort古い順link+3まずは本来なにをしたいがためにそのようなことをしてるか、というのを提示しましょうファイルを作りたい?ならデータベース持ち出してる場合じゃないだろうし、データベースに登録してなにをするんだ?という話になるし。評価が高い回答ほどページの上位に表示されます。remove低評価0回答の評価を下げる下記のような回答は推奨されていません。評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。15:26確かに、本来どういうことをしたいのか、とういう一番大事な部分が読み取れませんね。一度よく考え、質問を修正します。ありがとうございました。確かに、本来どういうことをしたいのか、とういう一番大事な部分が読み取れませんね。一度よく考え、質問を修正します。ありがとうございました。FileShare.Write))FileShare.Writeだと、このファイルへの他からの書き込みは許可するが、読取は許可しないことになりますので、FileShare.Readにして読取を許可した方が良いのではないでしょうか?これであれば、FileSystemWatcherのイベントが発生した時点では、読取は許可されているので、例外の発生なく、読取モードで変更後の内容を得られるかも知れません。問題2については、私ならタイマーを使用してリトライさせます。例外発生したら、タイマーをセットして、タイマーTickでリトライ。安全のため、何回かリトライしてもダメだったらメッセージを出して中断する、という感じです。タイマーのインターバルが1秒くらいがいいのか、0.5秒くらいがいいのか、は実用的な程度にすればよいと思います。評価が高い回答ほどページの上位に表示されます。remove低評価0回答の評価を下げる下記のような回答は推奨されていません。評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。15:56確かに、FileStreamの第4引数が間違っていました。Readにすることによってエラーがなくなりました。問題2の複数からの書き込みですが、権限機能つけました。権限のフラグ管理も結局はファイルなのですが、ファイル内容が単純で、万が一競合が起き、ファイルが消えてしまってもユーザーの方で復旧できるので大丈夫。いう内容でOKをいただきました。ここまで詳しく掘り下げ、ご回答していただき本当にありがとうございました。確かに、FileStreamの第4引数が間違っていました。Readにすることによってエラーがなくなりました。問題2の複数からの書き込みですが、権限機能つけました。権限のフラグ管理も結局はファイルなのですが、ファイル内容が単純で、万が一競合が起き、ファイルが消えてしまってもユーザーの方で復旧できるので大丈夫。いう内容でOKをいただきました。ここまで詳しく掘り下げ、ご回答していただき本当にありがとうございました。解決済FileStreamで読み込んだXMLのうち、特定行だけを読み込まないようにする。ファイル読み込み時にNullReferenceExceptionが発生してしまう。頂いたご意見への回答は行っておりません。