Autor Beitrag
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 647

WinXP + fbsd
Delphi 5 Prof
BeitragVerfasst: Do 05.06.03 21:14 
Kommt drauf an, was du zippst, ich hab nen zipordner und darin ist ne datei mit 100% komprimierung :mrgreen: von 107Mb auf 104KB :mrgreen:

(Ist ne Textdatei mit lauter 1en)

_________________
.: Es wird der Tag kommen, an dem wir es nicht mehr ändern können :.
mimi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: 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 user profile iconTino: Absätze entfernt.

_________________
MFG
Michael Springwald, "kann kein englisch...."
Tweafis
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 647

WinXP + fbsd
Delphi 5 Prof
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 563



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 563



BeitragVerfasst: So 08.06.03 18:06 
Das Komprimieren klappt wunderbar, nur irgendwas läuft beim Dekomprimieren schief... :roll: (dieser Code legt keine Wert auf saubere Programmierung :wink: )
ausblenden volle Höhe Delphi-Quelltext
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: 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 user profile iconTino: Absätze entfernt.

_________________
MFG
Michael Springwald, "kann kein englisch...."
O'rallY
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 563



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: 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 user profile iconTino: Absätze entfernt.

_________________
MFG
Michael Springwald, "kann kein englisch...."
O'rallY
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 563



BeitragVerfasst: 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:
ausblenden Delphi-Quelltext
1:
Memo1.LoadFromStream(Dest);					

_________________
.oO'rallY
Linux is like a tipi: No gates, no windows and a gnu-eating apache inside...
mimi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: 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 user profile iconTino: Absätze entfernt.

_________________
MFG
Michael Springwald, "kann kein englisch...."
mimi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: So 08.06.03 21:34 
habe den fehler gefunden:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: So 08.06.03 22:08 
mimi hat folgendes geschrieben:
habe den fehler gefunden:
ausblenden 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:
ausblenden 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-1of 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 563



BeitragVerfasst: 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...