Paules-PC-Forum.de Anzeige:

Microsoft Windows Intune: PC-Verwaltung und -Sicherheit in der Cloud: Updateverwaltung, Anti-Virus und vieles mehr!


Zurück   Paules-PC-Forum.de > Programmierung > XProfan

XProfan Alles rund um die Programmiersprache XProfan.

EM-Tippspiel

Paule bei Facebook


Paule bei Twitter


Letzte Forenthemen
Gehe zum ersten neuen Beitrag PPF - Spiel "Wörter weiter...
Aufrufe: 26970, Antworten: 4223
Gehe zum ersten neuen Beitrag PPF - Shoppingwahn
Aufrufe: 50963, Antworten: 1397
Gehe zum ersten neuen Beitrag Algorithmen Teil IV...
Aufrufe: 3361, Antworten: 128
Gehe zum ersten neuen Beitrag Pc lahmt plötzlich
Aufrufe: 186, Antworten: 6
Gehe zum ersten neuen Beitrag Bundesliga-Tippspiel Saision...
Aufrufe: 7670, Antworten: 186
Gehe zum ersten neuen Beitrag PC fährt nicht mehr hoch.
Aufrufe: 0, Antworten: 0
Gehe zum ersten neuen Beitrag Von Live CD Windowspfad...
Aufrufe: 329, Antworten: 19
Gehe zum ersten neuen Beitrag Captur 2.2 (Snow Leo)
Aufrufe: 28, Antworten: 0
Gehe zum ersten neuen Beitrag Captur 2.3 (Lion)
Aufrufe: 34, Antworten: 0
Gehe zum ersten neuen Beitrag Acer Aspire 8745ZG fährt...
Aufrufe: 69, Antworten: 6
Zeige:





Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 16.08.2009, 18:35   #1 (Direktlink)
Super-Moderator
 
Benutzerbild von Frabbing
 
Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
Standard Daten/Dateien packen/entpacken ohne Dll

Dateien packen/entpacken mittels API:

Code:
' ================================================================================\
' ================================================================================/
'
' Daten packen/entpacken ohne Dll, nur mittels API.
' © http://frabbing.bplaced.net
'
Def RtlCompressBuffer(8) !"ntdll.dll", "RtlCompressBuffer"
Def RtlDecompressBuffer(6) !"ntdll.dll", "RtlDecompressBuffer"
Def RtlGetCompressionWorkSpaceSize(3) !"ntdll.dll", "RtlGetCompressionWorkSpaceSize"
Def RtlMoveMemory(3) !"kernel32.dll", "RtlMoveMemory"
'
' Speicherbereich packen. Parameter: (Speicherbereich, Anzahl Bytes im Speicherbereich)
'
Proc CompressBuffer

  Parameters bbereich#, cbx& 
  Declare cstatus&, bworkspacesize&, fworkspacesize&, cbereich#, workspace#

  cstatus&=0
  
  IfNot RtlGetCompressionWorkSpaceSize(2, Addr(bworkspacesize&), Addr(fworkspacesize&))

    Dim workspace#,bworkspacesize&
    Dim cbereich#,cbx&+400
    
    IfNot RtlCompressBuffer(2,bbereich#,cbx&,cbereich#,cbx&+400,0,Addr(bworkspacesize&),workspace#)

      Clear bbereich#
      Long bbereich#,0=cbx&
      RtlMoveMemory(bbereich#+4,cbereich#,bworkspacesize&)
      cstatus&=bworkspacesize&+4

    EndIf

    Dispose workspace#
    Dispose cbereich#
    
  Endif

  Return cstatus&
  '
  ' Rückgabe: Anzahl der gepackten Bytes. Die gepackten Daten wurden in den übergebenen Speicherbereich kopiert.
  '
EndProc

'
' Originale Speichergrösse ermitteln. Parameter: (gepackter Speicherbereich#)
'
Proc GetDecompressSize

  Parameters bbereich#
  Return Long(bbereich#,0)

EndProc

'
' Speicherbereich entpacken. Parameter: (gepackter Speicherbereich, Anzahl Bytes im gepackten Speicherbereich, freier Speicherbereich)
'
Proc DecompressBuffer

  Parameters bbereich#, cbx&, cbereich# 
  Declare bworkspacesize&

  IfNot RtlDecompressBuffer(2,cbereich#,Long(bbereich#,0),bbereich#+4,cbx&-4,Addr(bworkspacesize&))
 
    Return bworkspacesize&

  EndIf
    
  Return 0
  '
  ' Rückgabe: Anzahl der entgepackten Bytes.
  '
EndProc
'
'
' ================================================================================\
' ================================================================================/
'

'
' ====> HAUPTPROGRAMM
'
Declare bereich#, bereich2#, text$, x&, xcopy&, newbytes&

Cls

While 1

  text$=LoadFile$("Datei zum Packen aussuchen","")

  If text$<>""

    ' Packen testen

    x&=FileSize(text$)
    xcopy&=x&

    If x&
      Dim bereich#, x&+400
      BlockRead(text$, bereich#, 0, x&)

      newbytes&=CompressBuffer(bereich#, x&)
      If newbytes&

        Set("Decimals",2)
        Print "Dateiname: "+text$
        Print "Originalgrösse liegt bei "+Str$(x&)+" Bytes, comprimiert bei "+Str$(newbytes&)+" Bytes."
        Print "Packrate liegt bei "+Str$(100-(newbytes&*100/x&))+" Prozent."
        text$=text$+".pck"

        BlockWrite text$, bereich#, 0, newbytes&
        Dispose bereich#

        ' Entpacken testen

        x&=FileSize(text$)
        If x&
          Dim bereich#, x&
          BlockRead(text$, bereich#, 0, x&)

          newbytes&=GetDecompressSize(bereich#)
          Dim bereich2#,newbytes&

          x&=DecompressBuffer(bereich#, x&, bereich2#)

          If x&

            text$=text$+".org"
            BlockWrite text$, bereich2#, 0, x&

            Print "Dateiname: "+text$
            Print "Decomprimierte Originalgrösse beträgt "+Str$(x&)+" Bytes."
            Print

          Else
            Print text$+" konnte nicht entpackt werden."
            Print

          EndIf      

          Dispose bereich2#
          Dispose bereich#

        EndIf

      Else

        Dispose bereich#
        Print text$+" konnte nicht gepackt werden."

      EndIf
    EndIf

  Else

    BREAK

  EndIf

EndWhile

WaitInput
End
__________________
Gruß, Frank


Webpage http://frabbing.bplaced.net
mit Freeware - Tools, Spiele und Grafiken.
Frabbing ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 16.08.2009, 18:45   #2 (Direktlink)
Super-Moderator
 
Benutzerbild von Jac de Lad
 
Registriert seit: 06.02.2009
Ort: Coswig
Alter: 27
Beiträge: 1.159
Standard

Wie groß sind denn die Packraten?
__________________
XProfan-Profi (XProfan X2+XPIA)
http://jacdelad.bplaced.net
http://jacdelad.square7.ch
Jac de Lad ist offline   Mit Zitat antworten
Alt 16.08.2009, 19:04   #3 (Direktlink)
Weiß worum´s geht
 
Benutzerbild von Sascha Oliver Haak
 
Registriert seit: 11.02.2009
Ort: Hagen, Westf.
Alter: 41
Beiträge: 171
Standard

@Frabbing
Tolle Routine hab sie gleich mal ausprobiert klappt gut.

@Jac de Lad
Ist natürlich unterschiedlich: Meine Beispiele 2% (eine PDF)
über 40% (bei verschiedenen Dateien) bis zu 62% bei Tabellen (XLS).

Gruß
Sascha
__________________
Wer ein Problem erkennt, und nichts zu seiner Beseitigung unternimmt, der ist möglicherweise ein Teil dieses Problems.

Besucht mich auf meiner HP: http:\\www.saolha.bplaced.net
Sascha Oliver Haak ist offline   Mit Zitat antworten
Alt 16.08.2009, 19:28   #4 (Direktlink)
Super-Moderator
 
Benutzerbild von Frabbing
 
Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
Standard

Genau, einfach ausprobieren. Wenn ich es richtig in Erinnerung habe, lagen die Packraten etwas unter ZIP.
__________________
Gruß, Frank


Webpage http://frabbing.bplaced.net
mit Freeware - Tools, Spiele und Grafiken.
Frabbing ist offline   Mit Zitat antworten
Alt 16.08.2009, 20:05   #5 (Direktlink)
Super-Moderator
 
Benutzerbild von Jac de Lad
 
Registriert seit: 06.02.2009
Ort: Coswig
Alter: 27
Beiträge: 1.159
Standard

Gar nicht mal so übel!
__________________
XProfan-Profi (XProfan X2+XPIA)
http://jacdelad.bplaced.net
http://jacdelad.square7.ch
Jac de Lad ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Antwort

  Paules-PC-Forum.de > Programmierung > XProfan

Lesezeichen

Stichworte
crunchen, entpacken, packen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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 an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Kostenlose Software zum Packen & Entpacken von Dateien Avalon Software - Allgemein 4 25.07.2009 15:15
entpacken winrar dateien bin cue dateien Irene Software - Allgemein 5 17.09.2007 12:50
Dateien mehrfach packen??? DoubleT Software - Allgemein 10 14.07.2005 11:43
welches programm zum entpacken und packen von dateien?? corto maltese Software - Allgemein 9 25.02.2005 09:12
Wie kann ich iso. daten entpacken ausser mit isobuster [TC]fan Software - Allgemein 5 17.09.2004 19:13



Alle Zeitangaben in WEZ +2. Es ist jetzt 12:01 Uhr.


Powered by vBulletin® Version 3.8.7 (Deutsch)
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Powered by vBCMS® 2.7.0 ©2002 - 2012 vbdesigns.de
(c) Paules-PC-Forum.de

::: Impressum :::

Search Engine Optimization by vBSEO 3.3.2