Pascal中有没有一种方法可以在不覆盖其他数据的情况下写入文件的开头?

我已经学会了Seek(F, 0); 但这会覆盖文件中的第一件事。

===============>>#1 票数:1

无法插入文件。 您只能覆盖或追加。 因此,如果您想用一个简单的线性文件自己做,则需要重写整个文件。 如果您的文件很大,那么它就不那么吸引人了。

解决问题的一种明显方法是使用本地数据库,而不是编写自己的文件处理机制。 数据库层为您管理索引编制,以便您避免昂贵的整个文件重写。

当然,如果文件很小并且不关心性能,那么可以轻松地解决问题。 此配方显示了如何将记录插入文件中的位置i 对于您声明的在开始时插入的目标,那么i将为零。

  • 然后将整个文件读入N条记录的数组中。
  • 将第一个i记录写回到文件中。
  • 将插入的记录写回到文件中。
  • 将剩余的Ni原始记录写回到文件中。

===============>>#2 票数:1

您不能在现有数据之前插入新数据。 写入文件的开头/中间总是会覆盖现有数据,您无法更改它。 您唯一的选择是创建一个新文件,首先将新数据写入其中,然后将现有文件的内容附加到新文件中,然后最后用新文件替换现有文件。

===============>>#3 票数:1 已采纳

您可以使用以下算法实现目标:

  • 创建临时文件;
  • 将新数据写入此临时文件;
  • 从目标文件中读取所有数据,并将它们附加到临时文件中;
  • 重命名临时文件为目标文件;

===============>>#4 票数: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;

但是有同样的局限性。 对于大文件,由于整个文件都已加载到内存中,因此速度会很慢。

  ask by Jackets translate from so

未解决问题?本站智能推荐:

2回复

lazarus / delphi(pascal) - 写入txt文件而不会在下次覆盖

我正在使用lazarus,我想保存到txt文件,程序关闭时的信息。 但每次重新打开程序时,它都会覆盖txt文件中之前的内容。 可以写入下一行,甚至每次都创建一个不同的txt文件。 这就是我所拥有的: 但是我给了我一个错误
2回复

外部文件写入未完成

当我在Pascal中写入外部文件时,即使编码完美无缺,外部文件也未完全写入。 顺便说一下,jadwal是印尼语的英语
2回复

使用FreePascal / Lazarus删除二进制文件的开头

我在FreePascal / Lazarus的第一笔大事业几乎完成了,但是这个问题困扰着我。 该程序需要打开一个特定的二进制文件(我们称其为Test.exe),从文件的开头删除特定数量的字节(例如2048个字节),然后再次将其写出。 Test.exe的大小有所不同,但是从开头删除的字节数
1回复

使用Lazarus freepascal将数据从.txt文件写入备忘录箱?

我在学校有一个项目,要求将.txt文件中的数据写入Lazarus freepascal中的“ memobox”。 像这样的顺序有数据。 布达佩斯番茄23都柏林电视45 Rosslare投影仪43 等等 我必须从.txt文件中读取这些数据,然后将它们写入Lazarus free
1回复

将字符串变量写入剪贴板

我马上就承认,至少可以说,我是帕斯卡尔缺乏经验的。 所以,我能得到的任何帮助将不胜感激。 :) 作为更大程序的一部分,我需要将一个字符串变量写入剪贴板。 我在Lazarus(版本1.0.12)中创建了一个新项目,所以我可以尝试弄清楚如何在没有由额外的,不必要的代码引起的复杂性的情况下
1回复

Pascal-两个不同文件之间的类继承?

说我有两个文件, characters.pas和ogre.pas 。 食人魔是一个角色,但为了干净起见,我试图将两个文件分开。 在characters.pas我有 在ogre.pas我有 添加uses无论是在.PAS文件的任何地方阻断抛出一个错误,这使我相信,依靠继承的所有类
2回复

坚持使用流媒体文件到字符串

好吧,所以我(非常)最近开始玩lazaruz / free pascal,我有点卡在阅读TMemoryStream文件和它的流媒体亲戚。 我正在尝试编写一个简单的base64编码器,它可以编码文本字符串或文件(如图像和WAV),然后在html和javascript中使用。 下面的代码
1回复

Pascal分段故障解析文本文件

我正在Pascal / Lazarus中使用Question / Answer UI应用程序。 我的问题是,通过单击按钮调用以下代码后,程序崩溃并出现Segmentation Fault错误。
1回复

有效地将文件读取到Pascal AnsiString中[关闭]

我有这段代码可以将文件内容读取到AnsiString变量中。 这段代码运行非常缓慢。 我有一个1 MB的文件,程序运行了大约27秒。 如何更快地将文件内容读取到AnsiString ?
1回复

TMemo中的Lazarus打开XML文件

我正在尝试以文本形式在TMemo中打开XML文件。 每当我这样做时,它就会打开: 我知道那不是XML中的内容,如果我在记事本中打开该文件,它将很好地打开并显示XML数据,纯文本。 这是我的代码: