C#、visual studio2017で開発しています。
複数のPCで1つのファイルを監視、IOができるシステムを作りたいと考えています。
ファイルの監視はFileSystemWatcherクラスを使用しています。
「IOができる」とうことで1つのファイルに対して複数のPCから書込みをしたり、読込みをしたりしています。
・書込みのタイミングはユーザーの任意のタイミング
・読込みのタイミングはファイルが変更された時点でFileSystemWatcherイベントが発生し、自動的に読み込む。
この2つの条件で開発を進めているのですが、問題点がいくつかあります。
1.書込みのタイミングが重なったらエラーが発生してしまう。
2.FileSystemWatcherのイベント発生タイミングは全て同じなので読込みが重なり、エラーが発生してしまう。
(それぞれのPCで1つのファイル変更を監視しているので、ファイルが変更された時点でイベントが発生し、それぞれのPCから1つのファイルを読み込もうとするため、エラーが発生する。)
この問題を解決するために以下の対策をしました。
C#
1public void 読み書きメソッド(){ 2 try{ 3 読み書きの処理 4 }catch{ 5 読み書きメソッド() 6 } 7} 8
良くない処理だとは思うのですが[try catch]で処理が完了するまで永遠に処理を繰り返すようにしています。
この方法で一応エラーは出なくなったのですが、デバッグをすると必ず、catchをしています。
このままでは気持ちが悪いのでIOについて少し調べました。
[FileStream]クラスを使用することで読み書きどちらも可能にすることができる?みたいなのですが、
読込み時に書き込み処理をしているとNullが入ってしまうバグが発生してしまいました。
結局読み込みと書き込みは一緒にすることができなさそうなのですが、
「複数のユーザーからの書き込み」と「複数のFileSystemWatcherイベントからの読込み」
を制御することは可能なのでしょうか?
また、現在はFile.クラスでストリームを使わずに処理をしています。(読み込む情報量がとても少ないため)
この場合でもStreamクラスを使うべきでしょうか?
回答1件
あなたの回答
tips
プレビュー