我在Delphi中创建程序,我需要在二进制文件中插入记录,但需要在2个现有记录之间插入记录。任何人都可以帮助我吗?
答案 0 :(得分:3)
如果您确实要插入,那么您必须创建一个具有不同名称的新文件,将旧文件内容复制到新文件,直到插入点。 ,然后将新记录写入新文件,最后将旧文件的其余部分复制到新文件。然后删除旧文件并将新文件重命名为旧文件的名称。
原始档案:
[A][B][C][D][E][F][G][H]
^
insertion point
首先复制插入点之前的内容:
[A][B][C][D]
写新记录:
[A][B][C][D][Z]
然后复制其余部分:
[A][B][C][D][Z][E][F][G][H]
如果您只想替换记录,那么请使用旧的Pascal Seek
和BlockRead
/ BlockWrite
或流来查看随机访问I / O,使用{ {1}}和TStream.Seek
。后者是更现代的做事方式。
根据评论中的建议,您还可以执行以下操作(使用与上述相同的例程):
打开文件进行读写,根据要插入的记录大小增加文件大小,移动内容"以上"插入点远离高级文件"地址"然后将记录写入插入点。
在:
TStream.Write
然后向上移动E:
[A][B][C][D][E][F][G][H]
^
insertion point
最后写下新记录:
[A][B][C][D][E][E][F][G][H]
^ <---------->
如果你想以块(例如,4k块)复制内容,那么不要忘记向后(从高文件指针到低)复制内容,这样你就不会覆盖你没有的内容读完了。或者你使用双缓冲区。或者......
你可以根据自己的意愿使它变得复杂。我个人可能会复制到一个新文件,删除旧文件并重命名新文件并完成它。
答案 1 :(得分:0)
该方法与将元素插入数组时的方法基本完全相同。请注意,它依赖于大小相同的记录。