【问题标题】:How to determine the order files are written to disk如何确定文件写入磁盘的顺序
【发布时间】:2016-09-29 14:30:34
【问题描述】:

我收到正在写入磁盘的 HL7 消息时遇到问题。问题是这两条消息是在同一毫秒内发送的,我需要确定哪一条是第一个,哪一条是第二个。我已经创建了这个代码来做到这一点,并且它大部分都有效。有时虽然它失败了,但我得到的时间跨度对象的刻度值为零。

DirectoryInfo d_messages = new DirectoryInfo(ConfigSettings.ReadSetting("AllRecievedHL7"));
d_messages.Refresh();
FileInfo[] messages = d_messages.GetFiles();

DateTime Message1 = messages[0].CreationTime;
DateTime Message2 = messages[1].CreationTime;
TimeSpan t_Test = Message1.Subtract(Message2);

 if (t_Test.Ticks > 0)
{
 //Message2 arrived before Message1
}
else
{
 //Message1 arrived before Message2
}

有没有人知道一种方法来确定它永远不会失败?

【问题讨论】:

  • 如果它们的时间戳相同,那么您只能根据文件的内容或文件的命名来判断。将消息写入磁盘的过程应负责确保排序顺序应易于确定,如果它对读取消息内容至关重要。
  • 文件时间根本没有那么准确。您也不需要计算两个 DateTime 值之间的差异,直接比较它们即可。如果要确定消息顺序,请确保使用包含递增后缀的名称存储文件名
  • 建议有效。由于我编写了接收消息的侦听器,因此我能够为这个测试用例添加一个标志,并且只需在消息写入磁盘和关闭时添加一个暂停。然后它从来没有失败过。最简单的解决方案。

标签: c# file datetime timespan hl7


【解决方案1】:

自从我编写了接收这些消息的界面以来,我为解决这个问题所做的一切就是添加一个睡眠。我在运行此特定测试时设置了一个标志,并在收到的消息之间添加了这一行。非常适合我。

Thread.Sleep(500);

【讨论】:

    猜你喜欢
    • 2015-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多