Seite 1 von 1

EXE nicht komprimierbar?

Verfasst: 31.03.2005 23:51
von Pure-r-Freak
Mein Problem ist, dass wenn ich mit den bsp aus dem codearchiev eine exe packen will, dass sie nicht kleiner wird.

Sie haben dann noch genau die selbe Größe

Mit allen anderen Dateiarten geht es !!???? :roll:

Also wenn ihr ne idee habt bitte sofort posten

Code: Alles auswählen

; German forum:
; Author:
; Date: 17. February 2003

;- Pack
; Dateien auswählen, Namen geben und Packen: 
NewList DateienPacken.s() ;Damit man unbegrenzt viele Dateien packen kann, wird eine dynamisch verknüpfte Liste erstellt. 
Pfad$ = "C:\" 

;Das Auswahlfenster für die zu packenden Dateien wird erstellt. #PB_Requester_MultiSelection = Auswahl mehrere Dateien möglich.  
Datei$ = OpenFileRequester("Dateien zum Packen auswählen", Pfad$, "Programme (*.exe)|*.*", 0, #PB_Requester_MultiSelection) 

If Datei$ + Datei$                         ;Wenn eine Datei ausgewählt wurde... 
  AddElement(DateienPacken())              ;wird die Liste um ein Element erweitert... 
  DateienPacken() = Datei$                 ;und der Name der Datei in die Liste geschrieben 
  Repeat 
    WeitereDatei$ = NextSelectedFileName() ;Weitere Dateien können ausgewählt werden. 
    If WeitereDatei$ 
      AddElement(DateienPacken()) 
      DateienPacken() = WeitereDatei$ 
    EndIf 
  Until WeitereDatei$ = "" 
  ;Hier kann man den Namen der fertig gepackten Datei angeben 
  NamePackDat$ = InputRequester("Dateien Packen", "Wie lautet der Name der Pack-Datei?", "Datei.pac") 
Else  ;wurde keine Datei zum Packen ausgewählt, wird... 
  End ;das Programm beendet. 
EndIf 


ResetList(DateienPacken())                 ;Die Liste wird zurück gesetzt, damit man sie neu auslesen kann. 
If CreateFile(0, Pfad$ + "Liste.tmp")      ;Hier wird eine temporäre Datei erstell, in der die Dateinamen gespeichert werden. 
  While NextElement(DateienPacken()) 
    Dateiname$ = GetFilePart(DateienPacken()) 
    WriteStringN(Dateiname$) 
  Wend 
EndIf 
CloseFile(0) 
    
If CreatePack(Pfad$ + NamePackDat$)        ;Die Pack-Datei wird erstellt. 
  AddPackFile(Pfad$ + "Liste.tmp")         ;Die temporäre Datei zuerst reingeschrieben. 
  ResetList(DateienPacken())                
  While NextElement(DateienPacken())       ;Und jetzt alle Dateien, die in der Liste stehn. 
    If AddPackFile(DateienPacken(), 0): EndIf 
  Wend 
EndIf  
ClosePack() 

DeleteFile(Pfad$ + "Liste.tmp")            ;Nun kann die temporäre Datei wieder gelöscht werden. 





;-Unpack
;Gepackte Datei aussuchen und wieder entpacken: 
NewList DateienEntpacken.s() ;Liste zum Entpacken erstellen 
Pfad$ = "C:\" 

;Auswahlfenster für die gepackte Datei 
PackDatei$ = OpenFileRequester("Dateien auswählen", Pfad$, "Gepackte Dateien (*.pac)|*.pac", 0) 
If OpenPack(PackDatei$)                                 ;Gepackte Datei öffnen. 
  *SpeicherAdresse = NextPackFile()                     ;Die erste Datei in eine Speicheadresse schreiben. 
  Groesse = PackFileSize()                              ;Die Groesse der Datei feststellen. 
  ;Die Datei auslesen lassen, damit man die Namen der gepackten Dateien erhält und in die Liste schreiben. 
  For Schleife = 1 To Groesse                            
    String$ = PeekS(*SpeicherAdresse, Groesse)  ; inhalt der datei kommt in String$
    Position = FindString(String$, Chr(13), Schleife) ;Es wird nach ???? gesucht
    AddElement(DateienEntpacken()) 
    Laenge = Position - Schleife     ;Endposition der Datei - 1  
    DateienEntpacken() = Mid(String$, Schleife, Laenge) ;Der Inhalt wird ausgeschn. und in die Liste kopiert
    Schleife = Schleife + Laenge + 1   ;Schleife bekommt den Wert: 1+Länge.d.Datei+1,  
     Next Schleife    
Else 
  End 
EndIf 


If CreateDirectory("C:\Entpackt") :EndIf ;Ein Verzeichnis wird erstellt, in welches die Dateien entpackt werden sollen. 

ResetList(DateienEntpacken()) 
While NextElement(DateienEntpacken()) 
  *GepackteDatei = NextPackFile() 
  Groesse = PackFileSize() 
  If CreateFile(0, "C:\Entpackt\"+DateienEntpacken()) ;Eine Datei mit einem Namen aus der Liste wird erstellt. 
    WriteData(*GepackteDatei, Groesse)                ;Die Datein werden in die Datei geschrieben. 
  EndIf 
  CloseFile(0)                                        ;Datei schließen, damit eine neue erstellt werden kann. 
Wend 


Verfasst: 31.03.2005 23:58
von ts-soft
Hab den Code getestet, funktioniert Einwandfrei. Vielleicht hast Du zu kleine Dateien gewählt
Gruß
Thomas

Re: EXE nicht komprimierbar ??????????

Verfasst: 01.04.2005 00:07
von Kiffi
> Mein Problem ist, dass wenn ich mit den bsp aus dem codearchiev eine
> exe packen will, dass sie nicht kleiner wird.

vielleicht ist die EXE schon gepackt (Stichwort: UPX).

Grüße ... Kiffi

Verfasst: 01.04.2005 00:17
von Pure-r-Freak
Jaaaa ihr habt wohl recht habs mit anderen versucht und es hat endlich geklappt! :bounce:
vielleicht ist die EXE schon gepackt (Stichwort: UPX).
Was sind den UPX exe????

Verfasst: 01.04.2005 00:28
von ts-soft
UPX kann exe, dll und sys Dateien packen, so das diese lauffähig bleiben. Packrate ca. 50%. Gibts auch für Linux. Grafische Oberfläche findest Du auf meiner Homepage: http://de.geocities.com/ts_softde oder ein Tool für die PB-Ide im PureArea.net von Falko

Gruß Thomas

[Edit]Nachtrag: Hier der Direktlink: http://de.geocities.com/ts_softde/SFX_UPX-GUI.zip [/Edit]

Verfasst: 01.04.2005 07:20
von freedimension
Als Querverweis hier ein weiterer Thread zu dem Thema:
http://forums.purebasic.com/german/view ... sc&start=0

Nicht als Kritik zu verstehen, war tatsächlich nicht so einfach zu finden :allright:

Verfasst: 01.04.2005 18:52
von GPI
Anmerkung zu UPX:

Durch das Packen erhöht sich der Speicherverbrauch in RAM erheblich.

Und meiner Meinung nach hat man gewöhnlich mehr HDD-Platz als RAM und zum verschicken über E-Mail etc. pack ich es eh mit rar,zip, weiß-der-geier.

UPX ist meiner Meinung nach einfach nur unnütz. (ok, wenn man programme auf einen MEmory Stick unter bringen muß, ansonsten unbrauchbar).

Verfasst: 01.04.2005 19:04
von ts-soft
Selbst von der HDD sind UPX-gepackte Programme schneller geladen durch ihre kleinere Größe. Dieser Geschwindigkeitvorteil ist größer als die Zeit, die das entpacken im Speicher benötigt. Angesichts von 512 und mehr MB RAM Computern versteh ich GPI's Argumentation nicht. Hab meine Programme fast immer mit UPX gepackt und werde es auch weiterhin tun, solange ich keine schlechten Erfahrungen damit habe.

Meine Anmerkung zur Anmerkung

Aber nicht weiter Diskutieren, sondern entscheidet lieber selbst

Gruß Thomas

Verfasst: 02.04.2005 16:19
von CNESM
Hi,
UPX ist meiner Meinung nach einfach nur unnütz
Unnutz ist alles auf der Welt, also auch dein Posting :D :freak: