前提・実現したいこと
編集用Formを開いている間、管理用データ(xmlファイル)へのアクセスを禁止(FileShare.None)したい
20台ほどの処理端末から管理用データにアクセスしているが、排他性の確保から、データ編集時は
アクセス禁止を行いたい
発生している問題・エラーメッセージ
1回目は出来ますが、2回目は例外になってしまう
該当のソースコード
C#
1 2public partial class TestClass 3{ 4 //変数 5 FileStream objFstream; 6 7 public TestForm() 8 { 9 InitializeComponent(); 10 11 string filePath = "\C:Test\testdata.xml" 12 13 //セットする 14 objFstream = new FileStream(filePath,FileMode.Open,FileAccess.ReadWrirte,FileShare.None); 15 } 16 17 //データを読み込む 18 private bool DataUpdate() 19 { 20 Using(DataSet ds = new DataSet()) 21 { 22 ds.ReadXml(objFstream) 23 } 24 } 25 26 private bool DataSave() 27 { 28 Using(DataSet ds = new DataSet()) 29 { 30 ds.ReadXml(objFstream) //例外が発生してしまう 31 32 *******データ処理******* 33 34 ds.WriteXml(objFstream) 35 } 36 } 37} 38
今までは一旦、
objFstream.Dispose();
A
objFstream = new FileStream(filePath,FileMode.Open,FileAccess.ReadWrirte,FileShare.None);
してましたが、処理用端末からのアクセスが****A*****の部分にあったのか、フリーズしてしまい
やり直しやデータ破損が発生しました。
通常であれば、処理端末の方ではFileShare.Noneの時は例外処理を行っていますが、一旦、ロックが外れた一瞬にアクセスされてしまうと不都合が発生してしまいます
運用で編集時は処理用端末を触らないとか、処理用端末の運用時間外で実施は難しいのが現状です
回答2件
あなたの回答
tips
プレビュー