Delphi 重写单行代码

4

我们能否重写文本文件的单行并保存关闭它呢?

例如,我需要重写第一行并保留所有其他行。是否有函数可以实现这个目的,还是说我必须在更改单行后复制整个文件?

我的文件包含超过一千行,我只需要更改第一行。

文件示例:

test;test1;test2
other;other;other
other;other;other
x1000

然后。
something;something;something
other;other;other
other;other;other
x1000

你明白我的意思吗?我只想保持文件原样,但更改第一行。我可以复制整个文件并在更改第一行后粘贴它,但我想知道 Delphi 中是否已经包含了仅更改文本文件中特定行的方法。谢谢!


http://stackoverflow.com/questions/13736707/modifying-or-deleting-a-line-from-a-text-file-the-low-level-way - Jan Doggen
2个回答

6
这是不可能的。文件是按线性存储的,不支持插入操作。如果您的行是固定长度的,那么您可以覆盖它。但是,如果您想用新内容替换该行并且新内容更长,则无法这样做。你需要重新编写整个文件。
与文本文件相比,数据库可能更适合您的需求。

从数据库中转储?希望你没有这样做。 - Jan Doggen
2
+1 问题很清楚,这是唯一正确的答案。由于这是一个问答网站,当前接受的答案并不回答所提出的问题。OP应该修改问题、删除它或切换接受的答案...(在我老年时变得有点暴躁...哦好吧...) - Lieven Keersmaekers
不是点数本身(David已经有足够的了),而是在接受答案时,您应该选择正确的答案,以便下一个有相同问题的读者能够使用它。 - Lieven Keersmaekers

2

我认为在这里最简单的方法是使用TStringList,具体操作如下:

procedure InPlaceFileEdit(fFile : String);
begin
F:=TStringList.Create;
try
  F.LoadFromFile(fFile);
  F.Strings[0]:='something;something;something' ;// Change the contents of the first line
  F.SaveToFile(fFile);
finally
 F.Free
end
end;

当然,这是一种每次完全重写文件的技巧。

2
请注意,这正是您所要求不要做的事情,即重新编写整个文件。如果需要以这种方式更改文件,则别无选择,但不要误以为您正在避免重新编写文件。 - David Heffernan
如果您有一种解决方案,可以仅重写文件中的一行,请在此处发布。我不知道Delphi是否有这种类型的“编辑器”来处理文件。 - user28470
@user28470:如果David知道一种可以完全解决你的问题的方法,他肯定不会发表回答说“这是不可能的”!你同意接受最初试图避免的解决方案是没问题的。我认为问题在于你发布了一个明确要求避免完全重写文件的问题,现在你接受了这个答案,并评论说“完美地工作”。 - Andriy M
因为我有点预料到这是不可能的,正如David所说的那样,我接受了这个解决方案,以取悦那位花时间回答我的人。 - user28470
注意:此解决方案并非真正的“原地”编辑。整个文件内容将被加载到内存中,解析为可单独寻址的行,进行编辑,然后合并到覆盖原始文件中。 - Free Consulting

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接