![]() |
Datei ändern, aber wie?
Guten Tag,
ich hänge mit diesen Funktionen Dateien an eine Andere.
Delphi-Quellcode:
Anhängen:
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;
Delphi-Quellcode:
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.
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; 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:
Jetzt den Rest abschneiden:
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;
Delphi-Quellcode:
Wenn ich jetzt ergebnis.jpg in ergebnis.zip umbenenne, zeigt er mir einen CRC-Fehler an. Muss ich noch einen Header verschicken?
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; Ich bin noch relativ großer Anfänger und bin für jede Hilfe sehr dankbar! :angle: P.S. Hoffentlich ist es jetzt etwas verständlicher. |
Re: Datei ändern, aber wie?
ich versteh die frage nicht ganz (find die unklar formuliert).
Wieso das? (ergibt ja logicher Weise rekursion und bringt nix) Zitat:
Und wo ist der Sinn das du einem Archiv (zip) eine Datei hinzufügst(anhängst) und das geänderte Archiv dann als jpg speicherst? |
Re: Datei ändern, aber wie?
Ich möchte einfach verstehen, wie das funktioniert. Nachdem ich der EineDatei.zip das Bild kid.jpg angehängt und in ergebnis.jpg gespeichert habe, wird nach Öffnen von ergebnis.jpg das kid.jpg Bild geöffnet. Ohne Fehler. Wenn ich ergebnis.jpg in ergebnis.zip umbenenne, kommt ein CRC-Fehler beim Öffnen in WinRAR. Also müsste ich doch eigentlich die angehängten Bytes abschneiden? Habe es gemacht, glaube ich, und es klappt immer noch nicht.
|
Re: Datei ändern, aber wie?
Hab das Problem gefunden:
Delphi-Quellcode:
Das hatte ich nicht ganz beachtet beim Abschneiden!
aStream.Write(iSize, SizeOf(iSize));
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz