有没有一种方法可以防止Windows缓存网络文件?

时间:2019-01-18 06:10:20

标签: c# windows caching file-io network-drive

我有一个商业软件,该软件将客户信息写到网络Windows驱动器上的二进制文件中。该体系结构使我无法使用除此网络驱动器以外的任何东西。

我有一个C#应用程序,我已编写该应用程序来解析此二进制文件中的数据。该应用程序只是处于循环状态,等待该文件被修改,然后解析客户信息以查找更改内容。然后它将更新我自己的自定义数据库中的客户记录。

问题:

  • 我使用商业软件包来更新客户记录(甚至可以十六进制转储文件并查看修改)
  • 我的C#应用​​程序读取了相同的文件(大概是),但是没有看到客户更新。它读取的内容与先前的解析相同

我是Linux专家,我首先想到的是,我在Linux NFS挂载上也遇到过类似的问题,并已将其修复,尽管很久以前我都不记得确切的解决方案。

我尝试过:

  • 使用组策略编辑器禁用所有文件的脱机文件。这没用。

  • 在更改客户后,通用长时间睡眠在读取更新的二进制文件之前。这没用。
    **有趣的是,我的代码将检测到修改后的时间戳并对其进行处理,但是内容似乎仍被缓存

  • 我已经对所有内部数据结构进行了三重检查,以确保它们在每次迭代中都是干净的。那里没有缓冲的数据。

  • 甚至在线发现了一个黑客,一个家伙说如果您将文件添加到同一目录,然后将其删除,它将以某种方式强制目录刷新。这没有用,但是以另一种方式突出了该问题。如果我创建了temp / hack文件,则立即尝试将其删除,因为我的应用程序看不到新的hack文件,所以该文件不起作用。即使在创建和删除之间丢了几秒钟的睡眠。

  • 我已尝试以编程方式将此文件移动到末尾带有_的相同文件名,然后再读取它。我的想法是,编写这个始终是唯一的新文件,将以某种方式迫使Windows从该文件夹为我提供最新,最出色的文件。但是,当我尝试读取此新的唯一文件时,即使我可以通过Windows资源管理器看到该文件,它也会告诉我找不到该文件。似乎我正在读取该目录的某些缓存版本。

奇怪的测试行为:

  • 如果我停止我的应用程序并重新启动它,它将始终读取文件的最新副本。这就是导致我首先重新检查所有内部数据结构以查看是否没有清除缓冲区或其他东西的原因。但是事实并非如此。

操作上,有多个用户和站点正在修改此客户数据,因此很多数据的变化非常快。我只需要一种强制读取实际数据文件的方法。感谢您提供的任何帮助。

更新: 使用一些评论,我可以使用它,但是我不会说我实际上找到了解决方案。这只是一个hack。我只是合并了我认为应该工作的所有内容,但是没有进行测试。首先,我将文件复制到同一个目录,历时数秒以秒计。然后,我进入一个循环,通过检查FileInfo.Exists查找该文件。当看不到它时,我FileInfo.Refresh(),稍等片刻,然后重试。在我的测试中,最多需要15秒才能摆脱此循环。一分钟后,它会出错,只是为了防止此处出现无休止的循环。然后,我删除该临时文件。

再说一次,我知道这很丑陋而且笨拙,所以我仍然对任何人都感兴趣,因为他们对如何更正确地处理这个问题有答案。

0 个答案:

没有答案