gpt4 book ai didi

delphi - 是否可以从文件开头删除字节?

转载 作者:行者123 更新时间:2023-12-03 14:42:47 26 4
gpt4 key购买 nike

我知道我可以有效地截断文件并从文件末尾删除字节。

是否有相应的有效方法来截断文件,即删除文件开头到文件中间某个点的内容?

最佳答案

当我读到您要求从文件开头开始删除内容的问题时。换句话说,您希望删除文件开头的内容并将剩余内容下移。

这是不可能的。您只能从末尾截断文件,而不能从开头截断文件。您需要将剩余内容复制到新文件中,或自行将其复制到同一文件中。

无论你怎么做,都没有捷径有效的方法来做到这一点。您必须复制数据,例如@kobik 所描述的。

Raymond Chen就此主题写了一篇很好的文章:How do I delete bytes from the beginning of a file?

<小时/>

只是为了好玩,这里有一个基于流的方法的简单实现,用于从文件中的任何位置删除内容。您可以将其与读/写文件流一起使用。我还没有测试过代码,我将把它留给你!

procedure DeleteFromStream(Stream: TStream; Start, Length: Int64);
var
Buffer: Pointer;
BufferSize: Integer;
BytesToRead: Int64;
BytesRemaining: Int64;
SourcePos, DestPos: Int64;
begin
SourcePos := Start+Length;
DestPos := Start;
BytesRemaining := Stream.Size-SourcePos;
BufferSize := Min(BytesRemaining, 1024*1024*16);//no bigger than 16MB
GetMem(Buffer, BufferSize);
try
while BytesRemaining>0 do begin
BytesToRead := Min(BufferSize, BytesRemaining);
Stream.Position := SourcePos;
Stream.ReadBuffer(Buffer^, BytesToRead);
Stream.Position := DestPos;
Stream.WriteBuffer(Buffer^, BytesToRead);
inc(SourcePos, BytesToRead);
inc(DestPos, BytesToRead);
dec(BytesRemaining, BytesToRead);
end;
Stream.Size := DestPos;
finally
FreeMem(Buffer);
end;
end;

关于delphi - 是否可以从文件开头删除字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9598032/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com