C#读取和删除用于消息传递的文件

我正在编写一个通过文件与非常老的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系统,因此无法更改其工作方式。


一只名叫tom的猫
浏览 131回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP