AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi ASCII-String und Binärtdaten in eine Datei schreiben

ASCII-String und Binärtdaten in eine Datei schreiben

Ein Thema von drunky1337 · begonnen am 10. Jun 2013 · letzter Beitrag vom 10. Jun 2013
Antwort Antwort
drunky1337

Registriert seit: 19. Mär 2013
Ort: Künzelsau
5 Beiträge
 
Delphi XE3 Architect
 
#1

ASCII-String und Binärtdaten in eine Datei schreiben

  Alt 10. Jun 2013, 14:35
Hallo Leutz,

ich möchte gerne eine Datei erstellen, in der sowohl ASCII-Strings (Header meiner Datei) als auch Binärtdaten enthalten sein sollen.

Mein erster Versuch war es die ASCII-Strings in eine StringListe zu schreiben und zum Schluss die Binärdaten über einen MemoryStream hinzuzufügen.
Leider scheitert das auch hier schon.
Ich kann die Strings problemlos in die StringList schreiben und diese als Datei speichern,
wenn ich aber

Delphi-Quellcode:
  Header.SaveToFile('C:\EDMSWAP\Header.hdf'); // 64kB groß
  Stream := getBinaryData(file_one);
  Stream.SaveToFile('C:\EDMSWAP\Data.hdf'); // 400 Byte groß
  Header.LoadFromStream(Stream);
  Header.SaveToFile('C:\EDMSWAP\HeaderAfterLoadFromStream.hdf'); // 2 Byte groß
ausführe hat meine StringList keinen Inhalt mehr und ist nur noch 2 Byte groß.
Ich vermute mal das LoadFromStream den kompletten Inhalt meiner StringList ersetzt.
Diese StringList hat zusätzlich Probleme mit den Binärdaten und intepretiert diese möglicherweise als irgendwelche Steuerzeichen und deshalb nur 2 Byte groß ist.

Langsam denke ich das die StringList für meine Anforderung erst gar nicht geeignet ist, leider bin ich in diesem Thema noch ganz am Anfang und würde mich sehr darüber freuen, wenn mich jemand auf die richtige Spurr schickt.

Mit freundlichen Grüßen

Arthur W.
Arthur
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

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

AW: ASCII-String und Binärtdaten in eine Datei schreiben

  Alt 10. Jun 2013, 14:39
Wenn du aus einem Stream liest in den du gerade geschrieben hast, muss du den Streamzeiger wieder zurücksetzen:
Delphi-Quellcode:
Stream := getBinaryData(file_one);
Stream.SaveToFile('C:\EDMSWAP\Data.hdf');
Stream.Position := 0; // <==
Header.LoadFromStream(Stream);
PS: ich hör schon aus der Ferne, wie deine Hand auf die Stirn klatscht
fork me on Github
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.304 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: ASCII-String und Binärtdaten in eine Datei schreiben

  Alt 10. Jun 2013, 14:42
Wenn Du weißt, wann die Strings zu Ende sind und die Binärdaten anfangen, könntest Du das auch mit mehreren Streams lösen, sofern ich keinen Denkfehler mache: ein "Komplett"-MemoryStream, in den Du mittels Stringlist.SaveToStream Deine Strings hineinschreibst, dann noch einen für die Binärdaten, welchen Du mit CopyFrom an den anderen anhängst. Bei Bedarf kannst Du dann alle einzeln in Dateien speichern.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
drunky1337

Registriert seit: 19. Mär 2013
Ort: Künzelsau
5 Beiträge
 
Delphi XE3 Architect
 
#4

AW: ASCII-String und Binärtdaten in eine Datei schreiben

  Alt 10. Jun 2013, 14:57
Wenn du aus einem Stream liest in den du gerade geschrieben hast, muss du den Streamzeiger wieder zurücksetzen:
Delphi-Quellcode:
Stream := getBinaryData(file_one);
Stream.SaveToFile('C:\EDMSWAP\Data.hdf');
Stream.Position := 0; // <==
Header.LoadFromStream(Stream);
PS: ich hör schon aus der Ferne, wie deine Hand auf die Stirn klatscht
Das mit der Position hatte ich auch schon versucht, das Ergebnis war leider trotzdem das gleiche.

Mit Hilfe von DeddyH seiner Idee habe ich mein Problem nun lösen können.

Delphi-Quellcode:
  DataStream := TMemoryStream.Create;
  Header.SaveToStream(DataStream);
  Stream := getBinaryData(file_one);
  Stream.SaveToStream(DataStream);
  DataStream.SaveToFile('C:\EDMSWAP\FullStream.hdf');
Ich schreibe jetzt in meinen neuen DataStream zuerst die StringList und anschließend die Binärdaten. Wenn ich jetzt diesem Stream als Datei abspeichere habe ich meine gewünschte Datei.

Vielen Dank für die schnellen Antworten
Arthur
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 15:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf