我正在编写一个通过文件与非常老的POS接口通信的支付系统。
POS系统尝试打开/创建文件(固定为单个名称)。如果打开文件,它将写入付款请求并关闭文件;如果打开文件失败,则POS系统将等待并重试(很抱歉,两次尝试之间的间隔时间不长,但很短)。
我必须监视目录,并且当我看到一个新文件到达时,然后我必须尝试打开该文件并阻止对POS系统的任何访问以写入任何新条目。当我打开文件时,我会仔细阅读记录并将其发送到支付系统,一旦收到确认,我就必须关闭文件并删除它。
我的关注/问题是-如何阻止POS系统在close和delete语句之间写入任何内容?
我可以将FileShare设置为Delete,这允许我的程序在关闭文件之前删除该文件,但这意味着其他进程也可以删除该文件,而不管我是否成功处理了记录。
选项1
void 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);
}
选项2
void 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系统,因此无法更改其工作方式。
相关分类