Newsgroup: it.comp.lang.visual-basic
Titolo: Compressione/decompressione

...
Salve, vorrei poter usare una libreria di compressione/decompressione dei
files in modo da poter
mettere su dischetto dei files compressi per poi copiarli e decomprimerli su
disco fisso.
Ho pensato che la scelta migliore potesse essere quella di utilizzare la
libreria di sistema
lz32.dll, ovvero quella che contiene tutte le funzioni per comprimere e
decomprimere i
files secondo lo standard microsoft (quello usato anche nei setup per
intenderci).
Ovvero, tutto quello che mi serve per usare le funzioni di compressione e
decompressione. Poi, ho scritto una piccola routine:
Function FCopyCompressed(SourceFile As String, DestinationPath As String) As
Boolean
End Function
La sopracitata routine accetta due parametri, SourceFile e DestinationPath
per la decompressione che, in effetti, è l'unica funzione che veramente mi
serve. Non c'è un destination file perchè si suppone che il file sorgente
sia stato compresso utilizzando l'opzione -r che include il nome originale
del file, quindi in pratica mi serve soltanto la directory di destinazione.
Cosa ho sbagliato?
I passi che bisogna compiere per decomprire molti file sono:
1. Aprire il file sorgente chiamando la funzione LZOpenFile
2. Aprire il file di destinazione chiamando la funzione LZOpenFile
3. Copiare il file con la funzione CopyLZFile
4. Chiudere i file con la funzione LZClose
la tua routine diventa dunque
Sub FCopyCompressed(SourceFile As String, DestinationPath As String)
    Dim Pippo As OFSTRUCT
    Dim DestinationFileName As String
    Dim CompleteDestinationName As String
        dim SourceHFile as long,DestHFile as long
        dim Esito as integer, numByteCopy as long
        esito = GetExpandedName (SourceFile, DestinationFileName )
    CompleteDestinationName = DestinationPath & DestinationFileName
    SourceHFile = LZOpenFile (SourceFile, Pippo, OF_READ )
    DestHFile = LZOpenFile (CompleteDestinationName, Pippo, OF_CREATE )
    numByteCopy = LZCopy(SouceHFile, DestHFile)
    LZClose SourceHFile
    LZClose DestHFile
End Sub
Buon lavoro
Bruno

 Bruno
  Grazie per l'interessamento, ma purtroppo non funziona... ;-) In effetti, non
compie nessuna operazione anche se
adesso almeno non pianta piu' il sistema! Altre idee?
Ender

> End Sub
DestinationFileName deve avere una grandezza sufficiente a contenere il
valore restituito
inoltre dopo la chiamata a GetExpandedName il valore contenuto nella
variabile DestinationFileName sarà
path + nome
es:
sourcefile = "c:\pippo\pluto.ex_"
destinationFileName = "c:\pippo\pluto.exe"
ti conviene allora
FCopyCompressed "c:\pippo\" ,"pluto.ex_", "c:\temp\"
Sub FCopyCompressed(PathSourceFile As String,SourceFile As String,
DestinationPath As String)
Dim TempStringa as string
dim OldStringa as string
OldStringa = PathSourceFile & SourceFile    ' "c:\pippo\pluto.ex_"
tempstringa = len(OldStringa)-1
esito = GetExpandedName (oldStringa, tempStringa)    ' tempStringa =
"c:\pippo\pluto\exe"
CompleteDestinationName = DestinationPath & Mid$(tempStringa,
Len(PathSourceFile))    ' "c:\temp\pluto.exe"



Bruno wrote:

  Ciao sono Moreno,
ho provato questa funzione di decompressione visto che stavo appunto
cercando una cosa simile. Purtroppo pero' mando in esecuzione il mio
programma arriva a termine ma non mi decomprime nessun file.
Mi sono fatto tutta la sfilza di dichiarazioni :
Public Const OFS_MAXPATHNAME& = 128
Public Type OFSTRUCT
 cBytes As Byte
 fFixedDisk As Byte
 nErrCode As Integer
 Reserved1 As Integer
 Reserved2 As Integer
 szPathName(OFS_MAXPATHNAME) As Byte
End Type
Public Const OF_CREATE& = &H1000
Public Const OF_DELETE& = &H200
Public Const OF_EXIST& = &H4000
Public Const OF_PARSE& = &H100
Public Const OF_PROMPT& = &H2000
Public Const OF_READ& = &H0
Public Declare Function CopyLZFile Lib "lz32.dll" (n1 As Long, n2 As Long)
As Integer
Public Declare Function GetExpandedName Lib "lz32.dll" Alias
"GetExpandedNameA" (lpszSource As String, lpszBuffer As String) As Integer
Public Declare Function LZClose Lib "lz32.dll" (hfFile As Long) As Integer
Public Declare Function LZCopy Lib "lz32.dll" (hfSource As Long, hfDest As
Long) As Integer
Public Declare Function LZDone Lib "lz32.dll" () As Integer
Public Declare Function LZInit Lib "lz32.dll" (hfSrc As Long) As Integer
Public Declare Function LZOpenFile Lib "lz32.dll" Alias "LZOpenFileA"
(lpszFile As String, lpOf As OFSTRUCT, style As Long) As Integer
Public Declare Function LZRead Lib "lz32.dll" (hfFile As Long, lpvBuf As
String, cbread As Long) As Integer
Public Declare Function LZSeek Lib "lz32.dll" (hfFile As Long, lOffset As
Long, nOrigin As Long) As Integer
Public Declare Function LZStart Lib "lz32.dll" () As Integer
ma quando lancio la funzione:
Sub FCopyCompressed(SourceFile As String, DestinationPath As String)
    Dim Pippo As OFSTRUCT
    Dim DestinationFileName As String
    Dim CompleteDestinationName As String
    Dim SourceHFile As Long, DestHFile As Long
    Dim Esito As Integer, numByteCopy As Long
    Esito = GetExpandedName(SourceFile, DestinationPath)
    CompleteDestinationName = DestinationPath & DestinationFileName
    SourceHFile = LZOpenFile(SourceFile, Pippo, OF_READ)
    DestHFile = LZOpenFile(CompleteDestinationName, Pippo, OF_CREATE)
    numByteCopy = LZCopy(SourceHFile, DestHFile)
    LZClose SourceHFile
    LZClose DestHFile
End Sub
con
SourceFile = "c:\temp\dv.ex_"
DestinationFileName = "c:\temp\dv.exe"
Call FCopyCompressed(SourceFile, DestinationFileName)
alla fine non ottengo proprio nulla.
Sono nuovo in questo gruppo e mi pare molto interessante. Se quanlcuno sa
dove sbaglio lo ringrazio in anticipo.
Moreno Vaccari