【发布时间】:2021-02-23 12:40:12
【问题描述】:
我有一个文本文件,其数据可能如下所示。
data0 ; data1
10000 ; 88282
55002 ; 75555
10002 ; 22550
22222 ; 58799
....
78954 ; 54647
然后我想向它添加数据,这将使文件如下所示。 文件中的数据永远不会改变。
data0 ; data1 ; data2
10000 ; 88282 ; 51485
55002 ; 75555 ; 48526
10002 ; 22550 ; 47892
22222 ; 58799 ; 36258
....
78954 ; 54647 ; 58429
我想向每一行添加数据。 我知道你可以通过阅读整个文件来做到这一点。然后将数据添加到此,然后将其写回文件。但问题是我会有很多数据。 如果我每次都必须读取和写回所有这些数据,这将花费太多时间。
因此我想知道是否没有方法可以在不先读出所有数据的情况下在特定行上添加数据。
【问题讨论】:
-
这是一个文件,不是随机访问。因此,您在任何最近的硬件上都会有合理的速度(2014 年的 40 欧元 ssd 大约是 3-6gb/s)。您可以通过不读取并简单地创建一个新文件来将读/写减半。或者将数据推送到数据库中。但文件流确实允许随机访问。所以理论上你可以保存所有endline的位置,然后写在那里。但是你必须确保你在正确的字节偏移,以正确的编码开始一个字符。
-
C# 中是否有可以写入文件中特定字节的方法? @DragandDrop
-
使用filestream,您可以更改position。但我不会那样做。我知道将所有内容加载到内存中看起来很慢。所以你为什么不打开 2 个流,一个用于阅读,一个用于写作。读取一行修改并写入第二个流。
-
如果我打开 1 个流读取和 1 个写入,我仍然需要将整行写回。但是对于文件流,您只能写入字节,对吗? @DragandDrop
-
@Lauradebaets:由于您正在更改行的长度,因此您必须在该行之后重写文件的整个部分(将其移至为行增长腾出空间)。跨度>