为了账号安全,请及时绑定邮箱和手机立即绑定

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 关注
  • 125 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信