我正在处理一个非常大的文件。我说的是千兆字节。
我需要能够从特定索引中读取一行,因为文本文件一直在更新。实现这一目标的最快解决方案是什么?我完全不受空间要求的限制。
编辑:发布了更多详细信息。假设我有以下文本需要阅读:
Jun 21 09:47:53 ez-x5 user.debug if_comm: [TX] 30 40 05
Jun 21 09:47:53 ez-x5 user.debug if_comm: [RX] 04
Jun 21 09:47:53 ez-x5 user.debug if_comm: [TX] 30 40 05
Jun 21 09:47:54 ez-x5 user.debug if_comm: [RX] 02 30 40 0f 30 32 31 23 64 31 30 32 30 64 64 49 49 49 49 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 03 0b
此文本文件由我们的记录器持续更新。当文本文件更新时,我需要读取附加到日志中的任何内容的新行(用分隔)。
使用FileStream对象,您可以通过更改Position属性来随机访问文件。
请参见此处。
设置"位置"时,它会查找流中的位置,因此您需要提前知道要从文件中的何处开始查找。
在读取StreamReader.ReadLine()
时使用lineCounter
变量并将其递增。当你达到一个特定的索引(即lineCounter==SpecificIndex
)时,停止阅读。
通过使用MemoryMappedFile
,您可以将文件的一部分映射到内存中(这样就不会读取整个文件)。通过将其与FileSystemWatcher
相结合,您应该能够获得一个非常好的解决方案。