[英]How can I write to the beginning of a file and insert rather than overwrite data?
Pascal中有没有一种方法可以在不覆盖其他数据的情况下写入文件的开头?
我已经学会了Seek(F, 0);
但这会覆盖文件中的第一件事。
无法插入文件。 您只能覆盖或追加。 因此,如果您想用一个简单的线性文件自己做,则需要重写整个文件。 如果您的文件很大,那么它就不那么吸引人了。
解决问题的一种明显方法是使用本地数据库,而不是编写自己的文件处理机制。 数据库层为您管理索引编制,以便您避免昂贵的整个文件重写。
当然,如果文件很小并且不关心性能,那么可以轻松地解决问题。 此配方显示了如何将记录插入文件中的位置i
。 对于您声明的在开始时插入的目标,那么i
将为零。
N
条记录的数组中。 i
记录写回到文件中。 Ni
原始记录写回到文件中。 您不能在现有数据之前插入新数据。 写入文件的开头/中间总是会覆盖现有数据,您无法更改它。 您唯一的选择是创建一个新文件,首先将新数据写入其中,然后将现有文件的内容附加到新文件中,然后最后用新文件替换现有文件。
您可以使用以下算法实现目标:
这的变体。
procedure InsertFile(const aFile, aLine: String);
var
vList: TStringList;
begin
vList:= TStringList.Create;
try
vList.LoadFromFile(aFile);
vList.Insert(0, aLine);
vList.SaveToFile(aFile);
finally
vList.Free;
end;
end;
但是有同样的局限性。 对于大文件,由于整个文件都已加载到内存中,因此速度会很慢。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.