比如:
一个二进制文件长100Byte,删除11-20Byte部分,删除后长为90Byte
读到一个数组中来,去掉那一部分,在写入.不就可以了
不知道delete能不能在这里用
procedure TForm1.Button1Click(Sender: TObject);
var
fs: TFileStream;
ms: TMemoryStream;
buffer: array [0..9] of Char;
begin
// 删除
fs := TFileStream.Create(d:\test, fmOpenReadWrite);
ms := TMemoryStream.Create;
ms.CopyFrom(fs, 10);
fs.Position := fs.Position + 10; // 跳过10个字节
ms.CopyFrom(fs, fs.Size-fs.Position);
ms.Position := 0;
fs.Position := 0;
fs.Size := 0;
fs.CopyFrom(ms, ms.Size); // 回写
fs.Free;
ms.Free;
// 插入
FillChar(buffer, 10, $0F);
fs := TFileStream.Create(d:\test, fmOpenReadWrite);
ms := TMemoryStream.Create;
ms.CopyFrom(fs, 10);
ms.Write(buffer, 10); // 插入10个$0F
ms.CopyFrom(fs, fs.Size-fs.Position);
ms.Position := 0;
fs.Position := 0;
fs.Size := 0;
fs.CopyFrom(ms, ms.Size); // 回写
fs.Free;
ms.Free;
end;
楼上的真棒!
学习!
靠,就用内存流一下就搞定了
内存映射文件一个样的
只是Create/OpenFileMapping不同
而且使用的是指针