我正在編寫一個通過文件與非常老的POS接口通信的支付系統。POS系統嘗試打開/創建文件(固定為單個名稱)。如果打開文件,它將寫入付款請求并關閉文件;如果打開文件失敗,則POS系統將等待并重試(很抱歉,兩次嘗試之間的間隔時間不長,但很短)。我必須監視目錄,并且當我看到一個新文件到達時,然后我必須嘗試打開該文件并阻止對POS系統的任何訪問以寫入任何新條目。當我打開文件時,我會仔細閱讀記錄并將其發送到支付系統,一旦收到確認,我就必須關閉文件并刪除它。我的關注/問題是-如何阻止POS系統在close和delete語句之間寫入任何內容?我可以將FileShare設置為Delete,這允許我的程序在關閉文件之前刪除該文件,但這意味著其他進程也可以刪除該文件,而不管我是否成功處理了記錄。選項1void Main(){ string filename = @"C:\Temp\CHARGES.TXT"; using (var fs = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.None)) { var buffer = new byte[1024]; while (true) { var bytesRead = fs.Read(buffer, 0, buffer.Length); if (bytesRead == 0) break; var text = ASCIIEncoding.ASCII.GetString(buffer, 0, bytesRead); Console.Write(text); } } File.Delete(filename);}選項2void Main(){ string filename = @"C:\Temp\CHARGES.TXT"; using (var fs = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Delete)) { var buffer = new byte[1024]; while (true) { var bytesRead = fs.Read(buffer, 0, buffer.Length); if (bytesRead == 0) break; var text = ASCIIEncoding.ASCII.GetString(buffer, 0, bytesRead); Console.Write(text); } File.Delete(filename); }}由于這是一種付款系統,因此任何記錄丟失都是不可接受的。另外,由于我無法控制POS系統,因此無法更改其工作方式。
- 1 回答
- 0 關注
- 138 瀏覽
添加回答
舉報
0/150
提交
取消