Guten Tag,
ich hänge mit diesen Funktionen Dateien an eine Andere.
Delphi-Quellcode:
function AttachToFile(const AFileName: string; MemoryStream: TMemoryStream): Boolean;
var
aStream: TFileStream;
iSize: Integer;
begin
Result := False;
if not FileExists(AFileName) then
exit;
try
aStream := TFileStream.Create(AFileName, fmOpenWrite or fmShareDenyWrite);
MemoryStream.Seek(0, soFromBeginning);
aStream.Seek(0, soFromEnd);
aStream.CopyFrom(MemoryStream, 0);
iSize := MemoryStream.Size + SizeOf(Integer);
aStream.Write(iSize, SizeOf(iSize));
finally
aStream.Free;
end;
Result := True;
end;
Anhängen:
Delphi-Quellcode:
zipStream := TMemoryStream.Create;
zipStream.LoadFromFile('d:\EineDatei.zip'); //immer eine Andere
AttachToFile('d:\kid.jpg', zipStream); //immer die gleiche Datei
zipStream.SaveToFile('d:\ergebnis.jpg');
zipStream.Free;
Wenn ich der Zip-File das Bild anhänge, so kann ich nach dem Doppelklick auf ergebnis.jpg das Bild kid.jpg öffnen. Wenn ich die Datei ergebnis.jpg einfach in ergebnis.zip umbenenne, dann kommt ein CRC-Fehler, was natürlich logisch ist.
Nun möchte ich aber die Bytes, die ich angehängt habe, wieder abschneiden, damit ich das Zip-File öffnen kann.
Mein Ansatz. Herausfinden wie große kid.jpg ist:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
kid : TMemoryStream;
begin
kid := TMemoryStream.Create();
kid.LoadFromFile('d:\kid.jpg');
showmessage(IntToStr(kid.Size));
schneiden := kid.Size;
kid.free;
SplitFile('d:\EineDatei.zip');
end;
Jetzt den Rest abschneiden:
Delphi-Quellcode:
function SplitFile(FileName : TFileName ) : Boolean;
var
i : Word;
fs, sStream: TFileStream;
begin
fs := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
sStream := TFileStream.Create('d:\ergebnis.jpg', fmCreate or fmShareExclusive);
try
sStream.CopyFrom(fs, (fs.Size-schneiden)); //schneiden ist Größe von kid.jpg
finally
sStream.Free;
fs.Free;
end;
end;
Wenn ich jetzt ergebnis.jpg in ergebnis.zip umbenenne, zeigt er mir einen CRC-Fehler an. Muss ich noch einen Header verschicken?
Ich bin noch relativ großer Anfänger und bin für jede Hilfe sehr dankbar!
P.S. Hoffentlich ist es jetzt etwas verständlicher.