【发布时间】:2012-04-21 16:44:06
【问题描述】:
假设您有一个用 XML 或其他类似编码语言编写的文件。是否可以只重写一行而不是将整个文件变成一个字符串,然后更改该行,然后必须将整个字符串重写回文件?
【问题讨论】:
假设您有一个用 XML 或其他类似编码语言编写的文件。是否可以只重写一行而不是将整个文件变成一个字符串,然后更改该行,然后必须将整个字符串重写回文件?
【问题讨论】:
一般来说,不会。文件系统通常不支持在文件中间插入或修改数据的想法。
如果您的数据文件是固定大小的记录格式,那么您可以编辑记录而不覆盖文件的其余部分。对于像 XML 这样的东西,您可以理论上通过插入与语义无关的空白来用较短的值覆盖一个值,但您将无法编写一个 更大的值。
在大多数情况下,重写整个文件会更简单——如果可以的话,可以通过以流方式读取和写入(如果文件太大而无法一次性读入内存),或者只是加载整个文件进入一些内存数据结构(例如XDocument),进行更改,然后再次保存文件。 (您可能需要考虑保存到不同的文件,然后移动文件以避免在保存操作由于某种原因失败时丢失数据。)
如果所有这些最终都过于昂贵,您应该考虑使用多个文件(因此每个文件都更小)或一个数据库。
【讨论】:
如果您要替换的行大于您要替换的新行,那么只要有某种填充是可以接受的(例如空白字符“ ”)这不会影响您的申请。
另一方面,如果新内容大于要替换的内容,则需要将所有数据向下移动,因此您需要重写文件,或者至少从被替换的行开始。
既然您提到了 XML,那么可能是您以错误的方式处理问题。难道您需要的是替换特定的 XML 节点?在这种情况下,您可以考虑使用 DOM 将 XML 读取到节点层次结构中,并在其中添加/更新/删除,然后再将 XML 树写回文件。
【讨论】: