AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Datei ändern, aber wie?

Ein Thema von Imagination · begonnen am 13. Jun 2004 · letzter Beitrag vom 14. Jun 2004
 
Imagination

Registriert seit: 19. Mär 2003
14 Beiträge
 
#1

Datei ändern, aber wie?

  Alt 13. Jun 2004, 17:54
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.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:14 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