Pascal中有没有办法写入文件的开头,而不会覆盖其他数据?
我已经学会了Seek(F, 0);
,但这会覆盖文件中的第一件事。
答案 0 :(得分:1)
无法插入文件。您只能覆盖或追加。因此,如果您想使用简单的线性文件自己完成,那么您需要重新编写整个文件。如果您的文件很大,那么这是相当没有吸引力的。
解决问题的一种显而易见的方法是使用本地数据库,而不是编写自己的文件处理机制。数据库层为您管理索引,以便您可以避免昂贵的整个文件重写。
当然,如果您的文件很小并且您不关心性能,那么您可以轻松地解决问题。此配方显示如何将记录插入文件中的i
位置。对于您在开始时插入的既定目标,i
将为零。
N
条记录数组。i
记录写回文件。N-i
原始记录写回文件。答案 1 :(得分:1)
您无法在现有数据前插入新数据。写入文件的开头/中间始终会覆盖现有数据,您无法更改。您唯一的选择是创建一个新文件,首先将新数据写入其中,然后将现有文件的内容附加到新文件,最后用新文件替换现有文件。
答案 2 :(得分:1)
您可以使用以下算法实现目标:
答案 3 :(得分:0)
此变体。
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;
但同样有限。对于大文件,当整个文件加载到内存中时,它会很慢。