gpt4 book ai didi

delphi - 从 TextFile 中删除前 N 个字符而不创建新文件 (Delphi)

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

我只想从指定的文本文件中删除前 N 个字符,但我卡住了。请帮助我!

procedure HeadCrop(const AFileName: string; const AHowMuch: Integer);
var
F: TextFile;
begin
AssignFile(F, AFileName);
// what me to do next?
// ...
// if AHowMuch = 3 and file contains"Hello!" after all statements
// it must contain "lo!"
// ...
CloseFile(F);
end;

我尝试使用 TStringList 但它另外附加了结束行字符!

with TStringList.Create do
try
LoadFormFile(AFileName); // before - "Hello!"
// even there are no changes...
SaveToFile(AFileName); // after - "Hello!#13#10"
finally
Free;
end;

谢谢!

最佳答案

在 Windows 中,没有简单的方法可以从文件开头删除某些内容。您必须将文件复制到另一个文件,删除原始文件并重命名目标文件,或者将文件中的所有数据复制回几个字节,然后截断该文件。如果文件很小并且可以加载到内存中,则后一种方法就变得相当简单。

以下代码片段使用全尺寸内存缓冲区实现后一种方法。

var
fs: TFileStream;
ms: TMemoryStream;

begin
fs := TFileStream.Create('somefile', fmOpenReadWrite); // catch errors here!
try
ms := TMemoryStream.Create;
try
ms.CopyFrom(fs, 0);
ms.Position := 42; // head bytes to skip
fs.Position := 0;
fs.CopyFrom(ms, ms.Size - ms.Position);
fs.Size := fs.Position;
finally FreeAndNil(ms); end;
finally FreeAndNil(fs); end;
end;

关于delphi - 从 TextFile 中删除前 N 个字符而不创建新文件 (Delphi),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3966753/

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