AGB  ·  Datenschutz  ·  Impressum  







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

Datei an Datei anhängen

Ein Thema von MiniMax · begonnen am 26. Sep 2010 · letzter Beitrag vom 27. Sep 2010
Antwort Antwort
Seite 2 von 7     12 34     Letzte »    
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

AW: Datei an Datei anhängen

  Alt 26. Sep 2010, 13:43
Um das ganze mit einem Texteditor lesen zu können ist das sicher eine schöne Variante. Da aber auch ein JPEG mit in die Datei soll bietet es sich an alles binär zu speichern.

ungetesteter Code:
Delphi-Quellcode:
var
  lStream: TStream;
  lStartPos: Int64;
  lDataSize: Cardinal;
begin
  lStream := TFileStream.Create(YourFileName, fmCreate);
  try
    // Memo speichern
    lStartPos := 0;
    lStream.Position := lStream.Position + sizeof(lDataSize);
    YourMemo.Lines.SaveToStream(lStream);
    lDataSize := lStream.Position - lStartPos - sizeof(lDataSize);
    lStream.Position := lStartPos;
    lStream.Write(lDataSize, sizeof(lDataSize));
    // JPG speichern
    lStartPos := lStream.Size;
    lStream.Position := lStream.Position + sizeof(lDataSize);
    YourJPG.SaveToStream(lStream);
    lDataSize := lStream.Position - lStartPos - sizeof(lDataSize);
    lStream.Position := lStartPos;
    lStream.Write(lDataSize, sizeof(lDataSize));
  finally
    lStream.Free;
  end;
[Edit]
Wenn etwas unklar ist am Quelltext bitte nachfragen (nichts ist schlimmer als einfach abzutippen anstelle zu verstehen)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's

Geändert von SirThornberry (26. Sep 2010 um 13:47 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#12

AW: Datei an Datei anhängen

  Alt 26. Sep 2010, 13:45
-Länge 1. datei
-Inhalt 1. datei
-Länge 2. Datei
-Inhalt 2. Datei
...
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#13

AW: Datei an Datei anhängen

  Alt 26. Sep 2010, 13:48
Du hast die Wahl zwischen:
1.) das Rad neu erfinden
du denkst dir ein eigenes Format aus (Mit einem Header, der Länge und Name der Datei enthält)
2.) professionelle Vorgehensweise
a.) sich für ein Standard-Archivformat entscheiden
(z.B. .zip, *.cab, *.tar,..)
b.) Komponenten oder Klasse für das Archivformat besorgen
(z.B. auf Torry's)
  Mit Zitat antworten Zitat
MiniMax

Registriert seit: 15. Dez 2009
Ort: Bremen
193 Beiträge
 
Delphi 2009 Architect
 
#14

AW: Datei an Datei anhängen

  Alt 26. Sep 2010, 13:49
Den code werde ich nachher gelich mal testen --> thx dafür.

Wie bekomme ich denn die Datein wieder Getrennt und in einen Memo und ein Image geladen?
Gruß
MiniMax
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

AW: Datei an Datei anhängen

  Alt 26. Sep 2010, 13:50
Ich würde das ganze nicht als "Rad neu erfinden" bezeichnen sondern als Lösung maßgeschneiderte Lösung. Denn wozu soll man das ganze noch packen und den Quelltext mit verschiedenen Algorythmen des Formates aufblähen wenn man letzendlich nur mehrere Daten in einem Stream speichern will.

Wenn du den Code verstanden hast weißt du auch wie der umgekehrte Weg lautet (lesen aus einem Stream geht mit read anstelle von write)
Deswegen auch mein Kommentar das du nachfragen sollst wenn du am Code etwas nicht verstehst.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#16

AW: Datei an Datei anhängen

  Alt 26. Sep 2010, 13:50
Ist dass so richtig?
Probiere aus, ob du es wieder geladen bekommst. Aber ich würde kein Trennzeichen nehmen, denn das muss man bei Laden erst wieder suchen. Schreibe stattdessen an den Anfang die Länge des Textes.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

AW: Datei an Datei anhängen

  Alt 26. Sep 2010, 13:52
Zudem kann es vorkommen dass, das Trennzeichen in den Daten vorkommt. Entsprechend macht es mehr Arbeit das Trennzeichen zu suchen und in den Daten zu ersetzen als gleich darauf zu verzichten.
Natürlich kann man das ganze auch kombinieren in dem man die Länge + Trennzeichen nutzt aber das ist bei binärer Speicherung der Länge eben nicht notwendig.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
MiniMax

Registriert seit: 15. Dez 2009
Ort: Bremen
193 Beiträge
 
Delphi 2009 Architect
 
#18

AW: Datei an Datei anhängen

  Alt 26. Sep 2010, 13:58
Ok dann frage ich ma:

Delphi-Quellcode:

var
  lStream: TStream;
  lStartPos: Int64;
  lDataSize: Cardinal;
begin
  lStream := TFileStream.Create(YourFileName, fmCreate); //stream erstellen?
  try
    // Memo speichern
    lStartPos := 0; //wozu die Position heraus finden?
    lStream.Position := lStream.Position + sizeof(lDataSize); //was wird hier gemacht?
    YourMemo.Lines.SaveToStream(lStream); //is klar wird gespeichert
    lDataSize := lStream.Position - lStartPos - sizeof(lDataSize); //was wird hier gemacht`?
    lStream.Position := lStartPos; //warum den Zeiger verstellen?
    lStream.Write(lDataSize, sizeof(lDataSize)); //was wird hier reingeschrieben?

    // JPG speichern
    lStartPos := lStream.Size; //größe setzen wo der stream begginnt?
    lStream.Position := lStream.Position + sizeof(lDataSize); //was wird hier gemacht?
    YourJPG.SaveToStream(lStream); // Speichern is klar
    lDataSize := lStream.Position - lStartPos - sizeof(lDataSize); //??
    lStream.Position := lStartPos; //Warum den Zeiger Verstellen?
    lStream.Write(lDataSize, sizeof(lDataSize)); //was wird hier gemacht
  finally
    lStream.Free; //is klar
  end;
Warum ich so viele Fragen habe, ich habe noch nie mit streams gearbeitet
Gruß
MiniMax
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#19

AW: Datei an Datei anhängen

  Alt 26. Sep 2010, 13:59
Mit TFilestream die Datei wieder öffnen. Dann kannst du die Länge wieder auslesen. Nachdem du die Länge hast, schreibst du alles, was sich danach befindet in dein Memo. Allerdings nur so oft, wie in der Länge angegeben. Selbiges machst du mit dem JPEG.

Delphi-Quellcode:
procedure Laden();
var
  lStream: TStream;
  lStartPos: Int64;
  lDataSize: Cardinal;
  TextStream, JPEGStream: TMemoryStream;
begin
  lStream := TFileStream.Create(YourFileName, fmOpenRead);
  try
    // Länge lesen
    lStream.Read(lDataSize, sizeOf(lDataSize));

    TextStream := TMemoryStream.Create;
    TextStream.Size = lDataSize;
    // Text auslesen
    lStream.Read(TextStream.Memory, lDataSize);
    YourMemo.Lines.LoadFromStream(TextStream);
    TextStream.Free;

    // Bild laden
    lStream.Position := sizeof(lDataSize) + lDataSize; // Diese Zeile sollte weggelassen werden können, da der Stream ja schon die richtige Position hat.

    // Länge lesen
    lStream.Read(lDataSize, sizeOf(lDataSize));

    JPEGStream := TMemoryStream.Create;
    JPEGStream.Size = lDataSize;
    // Text auslesen
    lStream.Read(JPEGStream.Memory, lDataSize);
    YourJPEG.LoadFromStream(JPEGStream);
    JPEGStream.Free;
  finally
    lStream.Free;
  end;
end;
ungetestet, sollte aber funktionieren.

Bernhard

ADD: Was der Code von SirThornberry macht ist eigentlich nicht schwer: Er erstellt einen Stream (Filestream zum Lesen/Schreiben von Dateien). In diesen Stream wird eine 0 (Datentyp: Cardinal) geschrieben. Dann kommt der Text rein. Streamlänge - Länge von Cardinal = Textlänge. Diese Textlänge wird jetzt ganz vorne hingeschrieben. Danach macht er hintendran weiter: 0 (Cardinal) reinschreiben, dann das Bild hintendran. Jetzt noch die Länge des Bildes berechnen und die 0 vor dem Bild ersetzen, fertig.
Bernhard
Iliacos intra muros peccatur et extra!

Geändert von rollstuhlfahrer (26. Sep 2010 um 14:02 Uhr)
  Mit Zitat antworten Zitat
MiniMax

Registriert seit: 15. Dez 2009
Ort: Bremen
193 Beiträge
 
Delphi 2009 Architect
 
#20

AW: Datei an Datei anhängen

  Alt 26. Sep 2010, 14:02
Woher weiß den der Code, wie lang der Text ist und das jpg? Der kennt doch nur die gesamt länge?
Gruß
MiniMax
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 7     12 34     Letzte »    


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 14:13 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