亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C#讀取和刪除用于消息傳遞的文件

C#讀取和刪除用于消息傳遞的文件

C#
一只名叫tom的貓 2021-05-13 17:19:43
我正在編寫一個通過文件與非常老的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 回答

  • 1 回答
  • 0 關注
  • 138 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號