14.6 更新顺序访问文件
优质
小牛编辑
130浏览
2023-12-01
14.4 节介绍了格式化和写入顺序访问文件的数据修改时会有破坏文件中其他数据的危险。例如,如果要把名字 White 改为 Worthinglon,则不是简单地重定义旧的名字。White的记录是以如下形式写人文件中的:
300 White 0.00
如果用新的名字从文件中相同的起始位置重写该记录,记录的格式就成为:
300 Worthington 0.00
因为新的记录长度大于原始记录的长度,所以从 Worthington 的第二个 0 之后的字符将重定义文件中的下一条顺序记录。出现该问题的原因在于:在使用流插入运算符<<和流读取运算符>>的格式化输人,输出模型中,域的大小是不定的,因而记录的大小也是不定的。例如,7、14、-117、2047 和 27383 都是 int 类型的值,虽然它们的内部存储占用相同的字节数,但是将它们以格式化文本打印到屏幕上或存储在磁盘上时要占用不同大小的域。因此,格式化输入,输出模型通常不用来更新已有的记录。
也可以修改上述名字,但比较危险。比如,在 300 Whlte 0.00 之前的记录要复制到一个新的文件中,然后写入新的记录并把 300 White 0.00 之后的记录复制到新文件中。这种方法要求在更新一条记录时处理文件中的每一条记录。如果文件中一次要更新许多记录,则可以用这种方法。