比如:
一个二进制文件长100Byte,删除11-20Byte部分,删除后长为90Byte

解决方案 »

  1.   

    不知道delete能不能在这里用
      

  2.   

    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;
      

  3.   

    内存映射文件一个样的
    只是Create/OpenFileMapping不同
    而且使用的是指针