Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在文件增长时从文件中读取数据_C# - Fatal编程技术网

C# 在文件增长时从文件中读取数据

C# 在文件增长时从文件中读取数据,c#,C#,我有一个从实时数据流写入的二进制数据文件,所以它会随着数据流的到来而不断增长。同时,我需要以只读模式同时打开它,以便在我的应用程序(时间序列图)上显示数据。打开整个文件需要几分钟,因为它相当大(几100'MB) 我想做的是,与其每隔x秒重新打开/读取整个文件,不如只读取添加到文件中的最后一个数据,并将其附加到已读取的数据中。如果您控制此文件的写入,我会将其拆分为几个预定义大小的文件 当写入程序确定当前文件大于(例如)50MB时,请关闭它并立即创建一个新文件以写入数据。写入此数据的进程应始终知道要

我有一个从实时数据流写入的二进制数据文件,所以它会随着数据流的到来而不断增长。同时,我需要以只读模式同时打开它,以便在我的应用程序(时间序列图)上显示数据。

打开整个文件需要几分钟,因为它相当大(几100'MB)

我想做的是,与其每隔x秒重新打开/读取整个文件,不如只读取添加到文件中的最后一个数据,并将其附加到已读取的数据中。

如果您控制此文件的写入,我会将其拆分为几个预定义大小的文件

当写入程序确定当前文件大于(例如)50MB时,请关闭它并立即创建一个新文件以写入数据。写入此数据的进程应始终知道要将接收到的数据写入的当前文件


读卡器线程/进程将按顺序读取所有这些文件,在当前文件被完全读取时跳转到下一个文件。

我建议使用FileSystemWatcher通知文件的更改。在此基础上,缓存事件之间的文件大小等信息,并添加一些逻辑以仅响应完整行等。您可以使用FileStream类的Seek()方法跳转到文件中的特定点,并从该点进行只读。我希望它能有所帮助。

您可能可以使用FileSystemWatcher来监视文件中的更改,如下面给出的示例:


但我建议您评估另一个解决方案,包括一个队列,如RabbitMQ或Redis——任何具有订阅者-发布者模型的队列。然后,您只需将实时数据推送到队列中,就会有两个不同的侦听器(订阅者)-一个保存在文件中,另一个处理最后附加的数据。通过这种方式,您可以通过分配应用程序的负载实现更大的灵活性。

这是一种有趣的方法,但这听起来太麻烦了。与其改变措辞,不如适应问题