0

因此,假设您有一个用 XML 或其他此类编码语言编写的文件。是否可以只重写一行而不是将整个文件变成一个字符串,然后更改该行,然后必须将整个字符串重写回文件?

4

2 回答 2

2

一般来说,没有。文件系统通常不支持在文件中间插入或修改数据的想法。

如果您的数据文件是固定大小的记录格式,那么您可以编辑记录而不覆盖文件的其余部分。对于像 XML 这样的东西,理论上您可以通过插入与语义无关的空格来用较短的值覆盖一个值,但您将无法写入更大的值。

在大多数情况下,只重写整个文件会更简单——如果可以的话,可以通过以流方式读取和写入(如果文件太大而无法一次性读入内存),或者只是将整个文件加载到某个文件中-内存数据结构(例如XDocument),进行更改,然后再次保存文件。(您可能需要考虑保存到不同的文件,然后移动文件以避免在保存操作由于某种原因失败时丢失数据。)

如果所有这些最终都过于昂贵,您应该考虑使用多个文件(因此每个文件都更小)或一个数据库。

于 2012-04-09T09:03:24.600 回答
1

如果您要替换的行大于您要替换的新行,那么只要可以接受某种填充(例如空白字符“ ”),就可以影响您的申请。

另一方面,如果新内容大于要替换的内容,则需要将所有数据向下移动,因此您需要重写文件,或者至少从被替换的行开始。

既然您提到了 XML,那么您可能以错误的方式处理您的问题。难道您需要的是替换特定的 XML 节点?在这种情况下,您可以考虑使用 DOM 将 XML 读入节点层次结构,并在其中添加/更新/删除,然后再将 XML 树写回文件。

于 2012-04-09T09:10:28.363 回答