2

我们有一台实验室设备,它始终将制表符分隔的记录写入 CSV 文件,而我的任务是编写一个应用程序来使用该数据。那部分很容易。但是,除此之外,我还负责寻找一种方法,通过使用数据绑定的 WPF 应用程序“实时”“观看”该文件。有两个优点我必须帮助使这项任务变得更容易。

  1. 写入 CSV 的记录以 8 秒的间隔发生。

  2. 在我需要观看 CSV 的总时间段内,文件本身几乎不会增长到大于 100mb - 如果那样的话。我见过的大多数文件都是20-30mb。

我的问题

有没有办法打开文件并保持“恒定”读取或监视其内容,还是我必须使用经典文件 IO 轮询来做到这一点?

我试图解决这个问题的思考过程

在修辞上,我想,“这个 CSV 与数据库有什么不同?” 但进一步的研究表明,EF 不能直接使用 CSV。如果实体框架中的 DbContext 可以与数据绑定一起使用来报告属性的变化,我是否也可以设置类似的东西来观察 CSV 变化?但无论我走哪条路,任何解决方案都会不断回到“轮询”。例如,我可以使用 Linq 定期访问 CSV 并将结果返回给属性,并且当属性的值发生更改(已将某些内容添加到 CSV)时,数据绑定会知道它并且应用程序可以相应地采取行动。是的,这听起来像投票。

综上所述

如果有一个更简单的解决方案可以利用 WPF/数据绑定或 EF(如果可能)或一些我没有想到或在这里提到的 .NET 类来回答我的问题或解决我的问题,我很想听听。

4

1 回答 1

2

您可以使用 FileSystemWatcher 来检测文件长度或上次修改时间何时发生变化,只要您知道 FSW 在无法读取其指向的目录时表现不佳(例如因为您与共享的连接被中断;那里有解决方法)。

您最好不要让文件保持打开状态,否则您可能会干扰编写器。我的建议是在检测到更改时打开-读取-关闭。

EF 不是为直接处理文件而设计的;它旨在与可能是文件支持的数据库引擎一起使用,这是完全不同的事情。幸运的是,读取 CSV 行并不难,并且假设它是仅附加的,那么跟踪到目前为止您已经阅读了多远并在那时开始下一次阅读也不是一个难题。

于 2013-03-15T16:54:22.280 回答