| Autor |
Beitrag |
mimi
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Do 05.06.03 20:11
Hallo,
ich möchte eine selbstersellte zip datei "nur" in den ram laden. im zip befindet sich eine textdatei(für ein spiel, was ich erstellt habe). wie bekomme ich die Entpacke zip datei in den ram ?
es soll nichts auf der platte geschrieben werden. die datei ist 1,15 KB groß und gepackt ca 300 byte.
[mod="Tino]Absätze entfernt.[/mod]
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
tommie-lie
      
Beiträge: 4373
Ubuntu 7.10 "Gutsy Gibbon"
|
Verfasst: Do 05.06.03 20:32
Welche Bibliothek denn?
bei der zLib müsste es sowas wie "DeCompressBuf" oder "DeCompressBuffer" geben, das in einen String, bzw eine beliebige Variable entpackt. Evtl geht es auch mit MemoryStreams statt mit Filestreams, aber da müsste ich nachgucken und ausprobieren.
_________________ Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
|
|
mimi 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Do 05.06.03 20:34
ich dachte es gebe eine einfache komponente dafür, wo man einfach nur die zip angiebt und der rest passiert von alleine.
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
tommie-lie
      
Beiträge: 4373
Ubuntu 7.10 "Gutsy Gibbon"
|
Verfasst: Do 05.06.03 20:37
Was benutzt du denn zur Zeit? Nicht die zLib?
Komponenten wird es wahrscheinlich auch geben, aber ich kenne keine. aber die zLib ist auch nicht wirklich schwer zu verstehen.
_________________ Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
|
|
mimi 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Do 05.06.03 20:52
könntes du ein beispiel geben ?
wie man sowas mit zLib macht.
zLib soll doch bos zu 75% die datei packen ist das mehr als zip oder ist das weniger bzw. wie stack packt denn zip die datei ?
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
Tweafis
      
Beiträge: 647
WinXP + fbsd
Delphi 5 Prof
|
Verfasst: Do 05.06.03 21:14
Kommt drauf an, was du zippst, ich hab nen zipordner und darin ist ne datei mit 100% komprimierung  von 107Mb auf 104KB
(Ist ne Textdatei mit lauter 1en)
_________________ .: Es wird der Tag kommen, an dem wir es nicht mehr ändern können :.
|
|
mimi 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Do 05.06.03 22:18
lol, ich habe reinen text(wie gesagt eine reine Text datei, die für das spiel "lebenswichtig" ist) könnte mir jemmand ein beispiel geben wie ich mit diem zLib umgehen ? gibt es komponenten für diese packer lib ???
Moderiert von Tino: Absätze entfernt.
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
Tweafis
      
Beiträge: 647
WinXP + fbsd
Delphi 5 Prof
|
Verfasst: Do 05.06.03 22:53
| mimi hat folgendes geschrieben: | | lol, ich habe reinen text |
Naja, kommt auch drauf an wie der Text aufgebaut ist. Wie gesagt, mein Text besteht nur aus 1en also ungefähr so:
11111111111111111111111111111111111111
11111111111111111111111111111111111111
11111111111111111111111111111111111111
11111111111111111111111111111111111111
11111111111111111111111111111111111111
11111111111111111111111111111111111111
11111111111111111111111111111111111111
Nur halt ohne zeilenumbruch
das kann der dann komprimieren indem er die anzahl der einsen und die eins speicehrt.
_________________ .: Es wird der Tag kommen, an dem wir es nicht mehr ändern können :.
Zuletzt bearbeitet von Tweafis am Do 05.06.03 22:55, insgesamt 2-mal bearbeitet
|
|
mimi 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Fr 06.06.03 14:12
mit beispiel meinte ich ein beispiel qullcode wie man es in delphi machen müsste um das ziel zu erereichen:)
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
O'rallY
      
Beiträge: 563
|
Verfasst: So 08.06.03 10:29
Wenn du dir mal die ZLib Unit anguckst, findest du TCompressionStream und TDecompressionStream (Jedenfalls ab Delphi V. 6). Alles was du in diese Streams reinschreibst wird automatisch komprimiert bzw. dekomprimiert. Diese Streams kannst du wie nen MemoryStream handhaben, also das ganze findet nur im virtuellen Speicher statt.
_________________ .oO'rallY
Linux is like a tipi: No gates, no windows and a gnu-eating apache inside...
|
|
mimi 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: So 08.06.03 15:09
hatte ich schon angeschaut aber leider knnte ich damit nicht viel anfagen. könntes du mir bitte ein beispiel geben wie man damit packen könnte ?
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
O'rallY
      
Beiträge: 563
|
Verfasst: So 08.06.03 18:06
Das Komprimieren klappt wunderbar, nur irgendwas läuft beim Dekomprimieren schief...  (dieser Code legt keine Wert auf saubere Programmierung  )
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33:
| procedure TForm1.Button1Click(Sender: TObject); var Source, Dest: TMemoryStream; begin Source := TMemoryStream.Create; Source.LoadFromFile('e:\temp\temp.txt'); Dest := TMemoryStream.Create; with TCompressionStream.Create(clDefault, Dest) do try CopyFrom(Source, Source.Size); finally Free; end; Dest.SaveToFile('E:\temp\dest.txt'); Dest.Free; Source.Free; end;
procedure TForm1.Button2Click(Sender: TObject); var DecompressionStream: TDecompressionStream; Source, Dest: TMemoryStream; begin Source := TMemoryStream.Create; Source.LoadFromFile('E:\temp\dest.txt'); Dest := TMemoryStream.Create; DecompressionStream := TDecompressionStream.Create(Source); Dest.LoadFromStream(DecompressionStream); DecompressionStream.Free; Dest.SaveToFile('E:\temp\entpackt.txt'); Dest.Free; Source.Free; end; |
_________________ .oO'rallY
Linux is like a tipi: No gates, no windows and a gnu-eating apache inside...
|
|
mimi 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: So 08.06.03 18:09
der sagt mir nicht viel ich sehe nur das er die daten nicht in einem TString klasse ablegt. ich hätte jetzt noch einen wunsch: könntes du den code so umschreiben das er die daten in einer TStringklasse ablegt ?
also die daten einer zip sollen in einer Tstringliste rein. kann ich jetzt einfach das zip format nehmen oder muss ich das in ein anders format packen ?? kennst du tutors die zLib erklären ?
Moderiert von Tino: Absätze entfernt.
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
O'rallY
      
Beiträge: 563
|
Verfasst: So 08.06.03 18:19
Funktioniert bei dir denn die Dekomprimierung, wenn du den Code ausführst (natürlich mit angeglichenen Dateipfaden).
TStrings -> TStringList hat eine Option LoadFromStream. Das dürfte alle deine Wünsche erfüllen.
_________________ .oO'rallY
Linux is like a tipi: No gates, no windows and a gnu-eating apache inside...
|
|
mimi 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: So 08.06.03 18:35
das heißt also ich brauche nur die tsringlist mit loadstram aufrufen und als stream desk übegeben ? danke für deine hilfe den code werde ich später ausprobieren.
kann ich jetzt einfach ne zip datei laden ? oder wie geht das ?
Moderiert von Tino: Absätze entfernt.
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
O'rallY
      
Beiträge: 563
|
Verfasst: So 08.06.03 21:05
Ja, eigentlich müsstest du einfach eine ZIP-Datei laden können. Nur wie schon gesagt, Button2Click hat bei mir einen Stream irgendwas error hervorgerufen.
Ja, du kannst z.B. bei einem Memo einfach schreiben:
Delphi-Quelltext 1:
| Memo1.LoadFromStream(Dest); |
_________________ .oO'rallY
Linux is like a tipi: No gates, no windows and a gnu-eating apache inside...
|
|
mimi 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: So 08.06.03 21:28
bei mir kommt auch eine felermeldung beim entpacken. ich hatte mal eine text datei erstellt mit den worten: das ist nur ein test von heute. zip hatte darauß eine datei gemacht die über 100 Byte groß war und zlib unter 70-80 byte:)
Moderiert von Tino: Absätze entfernt.
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
mimi 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: So 08.06.03 21:34
habe den fehler gefunden:
Delphi-Quelltext 1:
| DecompressionStream := TDecompressionStream.Create(Source); |
wenn ich diese zeile rauß nehme geht es.
aber warum ist die falsch ???
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
mimi 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: So 08.06.03 22:08
| mimi hat folgendes geschrieben: | habe den fehler gefunden:
Delphi-Quelltext 1:
| DecompressionStream := TDecompressionStream.Create(Source); |
wenn ich diese zeile rauß nehme geht es.
aber warum ist die falsch ??? |
edit:
wenn ich Memo1.Lines.LoadFromStream(Dest); mache macht er keiner änderungen im Memo warum nicht ?
ich habe mir jetzt folgen code gesucht:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure ExpandStream(inStream, outStream :TStream); const BufferSize = 4096; var Count: Integer; ZStream: TDecompressionStream; Buffer: array[0..BufferSize-1] of Byte; begin ZStream := TDecompressionStream.Create(InStream); try while True do begin Count := ZStream.Read(Buffer, BufferSize); if Count <> 0 then OutStream.WriteBuffer(Buffer, Count) else Break; end; finally ZStream.Free; end; end; |
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
O'rallY
      
Beiträge: 563
|
Verfasst: Mo 09.06.03 10:17
Das Memo wird aus irgendeinem Grund nicht geupdated. Probier mal die Methode Refresh oder Update (oder sowas in der Richtung, weiß grad nicht den richtigen Namen).
| mimi hat folgendes geschrieben: |
habe den fehler gefunden:
Sourcecode:
DecompressionStream := TDecompressionStream.Create(Source);
wenn ich diese zeile rauß nehme geht es.
aber warum ist die falsch ???
|
Wenn du diese Zeile Rausnimmst, kann es eigentlich gar nicht funktionieren, weil der DecompressionStream dann keinen Inhalt hat.
Aber der von dir gefundene Code scheint die Lösung zu sein, wobei ich immer noch nicht verstehe, was bei meinem Code falsch war 
_________________ .oO'rallY
Linux is like a tipi: No gates, no windows and a gnu-eating apache inside...
|
|