我有一个商业软件,该软件将客户信息写到网络Windows驱动器上的二进制文件中。该体系结构使我无法使用除此网络驱动器以外的任何东西。
我有一个C#应用程序,我已编写该应用程序来解析此二进制文件中的数据。该应用程序只是处于循环状态,等待该文件被修改,然后解析客户信息以查找更改内容。然后它将更新我自己的自定义数据库中的客户记录。
问题:
我是Linux专家,我首先想到的是,我在Linux NFS挂载上也遇到过类似的问题,并已将其修复,尽管很久以前我都不记得确切的解决方案。
我尝试过:
使用组策略编辑器禁用所有文件的脱机文件。这没用。
在更改客户后,通用长时间睡眠在读取更新的二进制文件之前。这没用。
**有趣的是,我的代码将检测到修改后的时间戳并对其进行处理,但是内容似乎仍被缓存
我已经对所有内部数据结构进行了三重检查,以确保它们在每次迭代中都是干净的。那里没有缓冲的数据。
甚至在线发现了一个黑客,一个家伙说如果您将文件添加到同一目录,然后将其删除,它将以某种方式强制目录刷新。这没有用,但是以另一种方式突出了该问题。如果我创建了temp / hack文件,则立即尝试将其删除,因为我的应用程序看不到新的hack文件,所以该文件不起作用。即使在创建和删除之间丢了几秒钟的睡眠。
我已尝试以编程方式将此文件移动到末尾带有_的相同文件名,然后再读取它。我的想法是,编写这个始终是唯一的新文件,将以某种方式迫使Windows从该文件夹为我提供最新,最出色的文件。但是,当我尝试读取此新的唯一文件时,即使我可以通过Windows资源管理器看到该文件,它也会告诉我找不到该文件。似乎我正在读取该目录的某些缓存版本。
奇怪的测试行为:
操作上,有多个用户和站点正在修改此客户数据,因此很多数据的变化非常快。我只需要一种强制读取实际数据文件的方法。感谢您提供的任何帮助。
更新: 使用一些评论,我可以使用它,但是我不会说我实际上找到了解决方案。这只是一个hack。我只是合并了我认为应该工作的所有内容,但是没有进行测试。首先,我将文件复制到同一个目录,历时数秒以秒计。然后,我进入一个循环,通过检查FileInfo.Exists查找该文件。当看不到它时,我FileInfo.Refresh(),稍等片刻,然后重试。在我的测试中,最多需要15秒才能摆脱此循环。一分钟后,它会出错,只是为了防止此处出现无休止的循环。然后,我删除该临时文件。
再说一次,我知道这很丑陋而且笨拙,所以我仍然对任何人都感兴趣,因为他们对如何更正确地处理这个问题有答案。