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
Antwort Antwort
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
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Datei ändern, aber wie?

  Alt 13. Jun 2004, 18:38
ich versteh die frage nicht ganz (find die unklar formuliert).

Wieso das? (ergibt ja logicher Weise rekursion und bringt nix)
Zitat:
Da ich aber an irgendeine Datei immer die gleiche Datei anhänge
Sag am besten was du erreichen willst mit dem anhängen der Dateien an eine Andere, veilleicht versteht man dann die Problematik besser oder kann einen besseren Lösungsansatz geben

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?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Imagination

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

Re: Datei ändern, aber wie?

  Alt 13. Jun 2004, 20:34
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.
  Mit Zitat antworten Zitat
Imagination

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

Re: Datei ändern, aber wie?

  Alt 14. Jun 2004, 20:31
Hab das Problem gefunden:
aStream.Write(iSize, SizeOf(iSize)); Das hatte ich nicht ganz beachtet beim Abschneiden!
  Mit Zitat antworten Zitat
Antwort Antwort


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 16:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz