Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado por: th3y en Agosto 02, 2012, 03:34:53 am
-
Estaba buscando la manera de comprimir archivos y encontra esto
Private Function Comprimir(DestPath As Variant, SrcPath As Variant) As Boolean
On Error GoTo Fail
Dim oShell As Object
Set oShell = CreateObject("Shell.Application")
If Dir(DestPath) = "" Then
Open DestPath For Binary As #1
Put #1, , CStr("PK" & Chr(5) & Chr(6) & String(18, Chr(0)))
Close
End If
oShell.NameSpace(DestPath).CopyHere SrcPath
Comprimir = True
Fail:
End Function
Pero ahora busco, como se descomprimiria?
No estoy buscando archivos de terceros, no me gustan las dependencias? saben alguna otra forma?
-
Pero ahora busco, como se descomprimiria?
No estoy buscando archivos de terceros, no me gustan las dependencias? saben alguna otra forma?
En realidad ahí estas dependiendo de una extension de la shell de windows que puede ser desactivada :P y ademas que eso puede que funcione en Win7 pero a veces no funciona en XP (si, es raro :|)
Lo mejor es tener alguna DLL o el 7zip en consola al lado :P
-
Hola, como funcionar en XP funciona, claro como dice Raul puede que el servicio no este habilitado, pero creo que las probabilidades son muy bajas.
este parte de un código que usaba yo en una clase en la cual te da el progreso pero solo te pongo lo principal por si te interesa la clase esta en la parte del blog como Proyecto 2, en la parte del cliente.
Public Function UnZipPath(ByVal SrcPath As String, ByVal DestPath As String) As Boolean
On Error GoTo Fail
Dim oShell As Object
Dim OrigItem As Object
Dim DestItem As Object
Set oShell = CreateObject("Shell.Application")
For Each OrigItem In oShell.NameSpace(CVar(SrcPath)).Items
For Each DestItem In oShell.NameSpace(CVar(DestPath)).Items
If CBool((OrigItem.Name = DestItem.Name) And (OrigItem.Type = DestItem.Type)) Then GoTo Fail
Next
Next
oShell.NameSpace(CVar(DestPath)).CopyHere oShell.NameSpace(CVar(SrcPath)).Items
UnZipPath = True
Fail:
End Function
Public Function ZipPath(ByVal SrcPath As String, ByVal DestPath As String) As Boolean
On Error GoTo Fail
Dim oShell As Object
If Dir(DestPath) <> "" Then Kill DestPath
Set oShell = CreateObject("Shell.Application")
If Dir(DestPath) = "" Then
Open DestPath For Binary As #1
Put #1, , CStr("PK" & Chr(5) & Chr(6) & String(18, Chr(0)))
Close
End If
oShell.NameSpace(CVar(DestPath)).CopyHere CVar(SrcPath)
ZipPath = True
Fail:
End Function
Saludos.
-
Gracias Leandro :D
-
Raul, hay unas cuantas cosas que pienso respecto a esa dependencia? hay alguna forma de hacerlo independientemente dependiente? xD
Osea... tal vez.. hipoteticamente.. que cuando el programa se abra.. se autogenere el archivo dependiente.. eh escuchado y eh visto algo parecido en algunos programas.. un ejemplo es un downloader de youtube(convierte lo descargado con el archivo ffmpeg)
o hay alguna forma que puedas alojar el archivo dll dentro del programa, y soltarlo cada vez que se ejecute?
-
Osea... tal vez.. hipoteticamente.. que cuando el programa se abra.. se autogenere el archivo dependiente.. eh escuchado y eh visto algo parecido en algunos programas.. un ejemplo es un downloader de youtube(convierte lo descargado con el archivo ffmpeg)
o hay alguna forma que puedas alojar el archivo dll dentro del programa, y soltarlo cada vez que se ejecute?
Exacto, y si se puede, yo he hecho eso y me ha funcionado de maravillas :P y así funcionan los "droppers"
Colocas tu dependencia en un archivo de recursos, y eso lo pones cuando generas el EXE (o despues :P) y luego tienes que codificar que cuando se abra, si no existe la dependencia, la extraes y lo registras y haces todo el tramite :P
-
Una consulta (Revivi el tema despues de tiempo)
Como podria hacer para agregar mas de 1 archivo en un comprimido? y asi viceversa con descomprimir!
Gracias!