| |
|
|
- Página 1 - |
|
 Frank Abbing | Daten packen sin Dll, sólo mittels API.
================================================================================
================================================================================/
Daten packen/entpacken sin Dll, sólo mittels API.
© 2008 Franco Abbing, http://frabbing.de
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. Parámetro: (Speicherbereich, Anzahl Bytes en el Speicherbereich)
Proc CompressBuffer
Parámetros bbereich#, cbx&
Declarar cstatus&, bworkspacesize&, fworkspacesize&, cbereich#, workspace#
cstatus&=0
Caso negativo RtlGetCompressionWorkSpaceSize(2, Addr(bworkspacesize&), Addr(fworkspacesize&))
Dim workspace#,bworkspacesize&
Dim cbereich#,cbx&+400
Caso negativo RtlCompressBuffer(2,bbereich#,cbx&,cbereich#,cbx&+400,0,Addr(bworkspacesize&),workspace#)
Claro bbereich#
Largo bbereich#,0=cbx&
RtlMoveMemory(bbereich#+4,cbereich#,bworkspacesize&)
cstatus&=bworkspacesize&+4
EndIf
Disponer workspace#
Disponer cbereich#
Endif
Volver cstatus&
Rückgabe: Anzahl el gepackten Bytes. El gepackten Daten fueron en el übergebenen Speicherbereich kopiert.
ENDPROC
Originale Speichergrösse ermitteln. Parámetro: (gepackter Speicherbereich#)
Proc GetDecompressSize
Parámetros bbereich#
Volver Largo(bbereich#,0)
ENDPROC
Speicherbereich entpacken. Parámetro: (gepackter Speicherbereich, Anzahl Bytes en el gepackten Speicherbereich, freier Speicherbereich)
Proc DecompressBuffer
Parámetros bbereich#, cbx&, cbereich#
Declarar bworkspacesize&
Caso negativo RtlDecompressBuffer(2,cbereich#,Largo(bbereich#,0),bbereich#+4,cbx&-4,Addr(bworkspacesize&))
Volver bworkspacesize&
EndIf
Volver 0
Rückgabe: Anzahl el entgepackten Bytes.
ENDPROC
================================================================================
================================================================================/
====> HAUPTPROGRAMM
Declarar bereich#, bereich2#, texto$, x&, xcopy&, newbytes&
Cls
Mientras que 1
texto$=LoadFile$("Datei para Packen aussuchen","")
If texto$<>""
Packen testen
x&=FileSize(texto$)
xcopy&=x&
If x&
Dim bereich#, x&+400
BlockRead(texto$, bereich#, 0, x&)
newbytes&=CompressBuffer(bereich#, x&)
If newbytes&
Conjunto("Decimals",2)
Imprimir "Dateiname: "+texto$
Imprimir "Originalgrösse liegt en "+Str$(x&)+" Bytes, comprimiert en "+Str$(newbytes&)+" Bytes."
Imprimir "Packrate liegt en "+Str$(100-(newbytes&*100/x&))+" Prozent."
texto$=texto$+".pck"
BlockWrite texto$, bereich#, 0, newbytes&
Disponer bereich#
Entpacken testen
x&=FileSize(texto$)
If x&
Dim bereich#, x&
BlockRead(texto$, bereich#, 0, x&)
newbytes&=GetDecompressSize(bereich#)
Dim bereich2#,newbytes&
x&=DecompressBuffer(bereich#, x&, bereich2#)
If x&
texto$=texto$+".org"
BlockWrite texto$, bereich2#, 0, x&
Imprimir "Dateiname: "+texto$
Imprimir "Decomprimierte Originalgrösse beträgt "+Str$(x&)+" Bytes."
Imprimir
Más
Imprimir texto$+" podría no entpackt voluntad."
Imprimir
EndIf
Disponer bereich2#
Disponer bereich#
EndIf
Más
Disponer bereich#
Imprimir texto$+" podría no se envasarán."
EndIf
EndIf
Más
BREAK
EndIf
EndWhile
WaitInput
End
|
|
|
| |
|
|
|
| |
|
- Página 1 - |
|
 Frank Abbing | Welche Windowsversion (Por favor, en el Signatur angeben )? Huh, Línea 413? Soviel Zeilen ha el Code sí en Weitem no.  Como el Source beigelegt es, kannst du gerne el Ursache erforschen. Mi Tests verliefen todos fehlerfrei. |
|
|
| |
|
|
|
 Bernhard Künzel | ¡Hola Franco, Win Versión XP Home SP2 Profano Versión XProfan11ßRC9 Test con deiner Compress.exe: In el MessageBox kommt el Fehlermeldung "Zu wenig Speicher para Bereichs-Variable!" Línea 413! y en el Profanfenster es ".....podría no gepackt werden" Mit deinem Quellcode: Hier kommt sólo el Meldung en el Profanfenster ".....podría no gepackt werden"
lg Bernhard |
|
|
| |
|
|
|
 Frank Abbing | Sieht de, como wäre dein Arbeitsspeicher a Neige gagangen. Profano kann así viel Speicher no mehr reservieren. Es entonces kein Programmfehler, por lo tanto no Fehlermeldung, pero una Abbruch con Information. Yo bin deswegen así pingelig, como Yo simplemente sólo sicher stellen möchte, dass el Code fehlerfrei se ejecuta. |
|
|
| |
|
|
| |
|
- Página 2 - |
|
|
 Bernhard Künzel | ¡Hola Franco, habe una wav Expediente erfolgreich con encima 38,2 MB gepackt por lo tanto kann lo al Arbeitsspeicher no mentira. |
|
|
| |
|
|
|
 Sebastian Sprenger | Yo el Ursache...  Bernhards Archivos voluntad por el Packen no kleiner, pero größer y passen deshalb no en el Zona, en el Franco el Daten komprimieren lässt. Wenn Yo el Bereiche en 399 Bytes größer anlege: trabajo ellos todos. Saludo, Sebastian |
|
|
|  Profan² 7.0e, XProfan 9, 11.2a, FreeProfan32  Windows Vista Home Premium 32-Bit, 2.8 Ghz, 4 GB RAM  Windows Me, 1.8 Ghz, 256 MB RAM | 13.09.2008 ▲ |
|
|
|
|
 Frank Abbing | Ist no yo en el el Fall. Können el Daten no se envasarán, "stoppt" el Rutina rechtzeitig. Alles otro es sí auch Quatsch. |
|
|
| |
|
|
|
 Bernhard Künzel | ¡Hola Sebastian, du hast el richtige Ursache gefunden, por deine Los cambios voluntad el Archivos ahora gepackt, aber eben con un größeren Code como el Original.
¡Hola Franco, lo betrifft todos Archivos wo el Compression una größeren Code producido. el Fehlertext es en deinem Quellcode (siehe oben) instalado Más Disponer bereich# Imprimir texto$+" podría no se envasarán." EndIf
Mi gesendeten Archivos puede somit auch en dir no trabajo. Su XProfan no es una größeren Zona reservieren como en me. Es en efecto kein Fehler en deinem Code, porque si la gepackte Coder größer se como el Original, es no muy sinnvoll esta a packen. Aber el Fehlermeldung debería entonces lauten "keine Compression möglich" Was como alles Quatsch ser se, verstehe Yo wirklich no. |
|
|
| |
|
|
|
 Frank Abbing | Der Packfunktion se sí el Grösse el Daten transferencia. Wird el Valor überschritten, debería el API el Compression stoppen, y en me tut ellos el auch. Yo erhalte el Programa-Meldung, aber sin choque. |
|
|
| |
|
|
|
 Thomas Freier | Super! Und rápidamente. Damit costumbre Yo en Verschlüsselung el Vereinsdaten no Gedanken mehr hacer. El *.dbf Archivos waren otra vez einsetzbar y el el Kompressionswerte lagen en 70%. |
|
|
| |
|
|
|
 Frank Abbing | Exactamente, Thomas. Yo voluntad veces "Verschlüsselung" con en el Titel aufnehmen. 
@Sebastian: Hab deine Los cambios en el código instalado, el 400 Byte tun niemandem weh, si dafür überall funktioniert.  |
|
|
| |
|
|
|
 E.T. | Tiempo pregunta ne: qué es el eigentlich para una Formato, qué como fuera kommt. Können el Datein entonces sólo dieser Rutina otra vez entpackt voluntad ?? 
NACHTRAG: Kann Yo así auch una ganzen Ordner sicher packen (Statt Dateiname un directorio transferencia) ??
Sí.
Wenn du una ganzen Ordner packen willst, musst du el Daten el individual Files selber verwalten. Also dir una propio Formato dafür schaffen. |
|
|
| Grüße aus Sachsen... Mario WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte... | 15.12.2008 ▲ |
|
|
|
|
 | Zu Erstens glaub Yo "Ja", a Zweitens glaub Yo "Nein".  |
|
|
| |
|
|