我们有一个实验室设备,它始终将制表符分隔的记录写入CSV文件,我的任务是编写一个应用程序来使用该数据。那部分很容易。然而,除此之外,我还负责找到一种方法,通过使用数据绑定的WPF应用程序“实时”“观察”该文件。我有两个优势可以帮助您完成这项工作。
写入CSV的记录间隔为8秒。
在我需要观看CSV的整个时间段内,文件本身几乎不会增长到大于100mb - 如果是这样的话。我见过的大多数文件都是20-30mb。
我的问题
有没有办法打开文件并保持“常量”读取或观察其内容,或者我是否必须使用经典文件IO轮询来执行此操作?
我在尝试解决此问题时的思维过程
在修辞上,我想,“这个CSV与数据库有什么不同?”但进一步research显示EF无法直接使用CSV。如果实体框架中的DbContext可以与数据绑定一起使用来报告属性中的更改,我是否还可以设置类似于观察CSV更改的内容?但无论我采取什么样的方式,任何解决方案都会不断回归“民意调查”。例如,我可以使用Linq定期点击CSV并将结果返回到属性,当属性的值发生变化(某些内容已添加到CSV中)时,数据绑定会知道它并且应用程序可以相应地执行操作。是的,这听起来像是民意调查。
总结
如果有一个更简单的解决方案利用WPF /数据绑定或EF(如果可能)或某些.NET类我没有想到或已经提到过这里回答我的问题或解决我的问题,我很想知道它。
答案 0 :(得分:2)
您可以使用FileSystemWatcher来检测文件长度或上次修改时间何时发生变化,只要您知道FSW在无法读取其指向的目录时表现不佳的事实at(例如,因为您与共享的连接中断;有解决方法)。
你可能最好不要保持文件打开,否则你可能会干扰作者。检测到更改后的开放 - 读取 - 关闭将是我的建议。
EF不能直接用于文件;它设计用于可能由文件支持的数据库引擎,这是完全不同的事情。幸运的是,读取CSV行并不困难,假设它只是附加,跟踪你到目前为止读到的距离并开始下一次读取也不是一个难题。