不好意思上面的错了,下面的代码验证过了
去掉21到46的内容
var
FFile, temp: TFileStream;
Ext: String;
aa : pchar;
MemoryStrm : TmemoryStream;
size : integer;
begin
if OpenDialog1.Execute then begin
fFile := TFileStream.Create(OpenDialog1.FileName,fmOpenRead);
Ext := extractFileExt(OpenDialog1.Filename);
temp := TFileStream.Create(ExtractFilePath(application.ExeName)+'temp'+Ext,fmCreate);
fFile.Position :=0;
GetMem(aa,21);
size := ffile.read(aa^,21);
showmessage(intToStr(size));
size := temp.Write(aa^,21);
showmessage(intToStr(size));
Freemem(aa);
GetMem(aa,25);
fFile.Read(aa^,25);
MemoryStrm := TmemoryStream.create;
MemoryStrm.position := 0;
MemoryStrm.Write(aa^,25);
MemoryStrm.SaveToFile(ExtractFilePath(application.ExeName)+'temp1'+Ext);
Memorystrm.Free;
Freemem(aa);
GetMem(aa,fFile.Size-46);
FFile.Position := 46;
FFile.Read(aa^,fFile.Size-46);
temp.Write(aa^,fFile.Size-46);
temp.Free;
Ffile.Free;
freemem(aa);
end;
end;
合并回去
var
temp: TFileStream;
Ext,SecondFile: String;
aa : pchar;
FirstMemory, MemoryStrm : TmemoryStream;
size : integer;
begin
if OpenDialog1.Execute then begin
FirstMemory := TmemoryStream.Create;
FirstMemory.LoadFromFile(OpenDialog1.FileName);
Ext := extractFileExt(OpenDialog1.Filename);
temp := TFileStream.Create(ExtractFilePath(application.ExeName)+'megr'+Ext,fmCreate);
FirstMemory.Position :=0;
GetMem(aa,21);
size := FirstMemory.read(aa^,21);
showmessage(intTostr(size));
size := temp.Write(aa^,21);
Freemem(aa);
GetMem(aa,25);
SecondFile := Copy(OpenDialog1.Filename,0,length(OpenDialog1.Filename)-4);
secondfile := secondfile+'1'+ext;
MemoryStrm := TmemoryStream.create;
MemoryStrm.LoadFromFile(secondfile);
caption := IntToStr(memoryStrm.size);
MemoryStrm.Position := 0;
MemoryStrm.Read(aa^,25);
temp.Write(aa^,25);
Memorystrm.Free;
Freemem(aa);
GetMem(aa,FirstMemory.Size-21);
//FirstMemory.Position := 21;
FirstMemory.Read(aa^,FirstMemory.Size-21);
temp.Write(aa^,FirstMemory.Size-21);
temp.Free;
FirstMemory.Free;
freemem(aa);
end;
end;