Entwickler-Ecke
Dateizugriff - Daten aus Variable vom Typ FILE in Funktion LoadFromFile()
jjturbo - Di 25.10.11 09:20
Titel: Daten aus Variable vom Typ FILE in Funktion LoadFromFile()
Moin Forum,
Ich habe ein paar Grafiken, die ich mit ausliefern muss, aber möchte verhindern, dass jemand diese Grafiken einfach kopieren und weiterverwenden kann.
Ich habe etwas mit dem schönen Namen "MyArchiv" gefunden, was eigentlich ganz gut passen könnte.
Siehe
http://www.delphi-treff.de/tutorials/datenspeicherung/myarchiv/einleitung/
Ich kopiere alle meine Grafiken in ein solches Archiv, ich lese eine gewünschte Datei aus diesem Archiv und habe sie in einer Variable vom Typ FILE gespeichert.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| type TArchivTyp = record ArchivFile :File; Archivname :String; FileStart :TStringList; FileNames :TStringList; RueckgabeDatei :File; end; var Archiv :TArchiv; |
In Rueckgabedatei habe ich jetzt meine Datei.
Als nächstes möchte ich sie in Funktion wie z.B. TImage.Picture.LoadFromFile verwenden.
Aber da hakts irgendwie...
Delphi-Quelltext
1:
| Image1.Picture.LoadFromFile(Archiv.Ruekgabedatei) |
Das geht ja nun einmal nicht.
Ich hoffe Ihr könnt mir helfen?
Gruß Oliver
jjturbo - Di 25.10.11 09:56
Aber das würde ja bedeuten: Ich lese die Datei ein(Aus meinem Archiv), dann schreibe ich sie in eine temporäre Datei, und dann lese sie dann wieder ein. Also brauche ich dann ungefähr die dreifache Zeit?
Hintergrund: Es sind 3D-Dateien, die ich mit GL-Scene darstelle. Insgesamt ~200MB
Gibt es denn vielleicht noch eine andere elegante Möglichkeit?
baka0815 - Di 25.10.11 10:26
Du könntest die Rückgabedatei z.B. ein ein Byte-Array einlesen und damit weiter arbeiten, du könntest es auch mit einem TMemoryStream versuchen.
jasocul - Di 25.10.11 10:30
TMemoryStream wäre jetzt auch mein Vorschlag gewesen.
jjturbo - Di 25.10.11 11:09
TMemoryStream?
Könntet Ihr vielleicht mal einen kleinen Ansatz posten?
So vielleicht ungefähr?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| var fs : TStream; begin fs := TMemoryStream.Create; fs.Write(MyArchiv.RueckgabeDatei,SizeOf(MyArchiv.RueckgabeDatei)); GLFreeForm1.LoadFromStream(Dir + 'temp.stl',fs); fs.Free; end; |
jjturbo - Mi 26.10.11 08:28
Also, ich habe jetzt den Weg mit der temporären Datei gewählt. Das funktioniert ganz gut, nicht so langsam wie ich gedacht habe. Ehrlich gesagt kommt es mir genau so schnell vor wie vorher, als ich die Dateien direkt eingelesen habe :)
Danke an alle, die sich den Kopf zerbrochen haben :)
Gruß Oliver
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!