我正在编写一个通过文件与非常老的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
提交
取消