In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
TZip() en Xailer 5
TZip() en Xailer 5
Con el cambio de mis aplicaciones a Xailer5 y retomando el hilo...
https://www.xailer.com/forum/viewtopic. ... 437#p53096
*************************************************************************************
Resulta que lo que busco es hacer una copia de mis ficheros que estan en una carpeta
CarpetaA
FicheroA01
FicheroA02
CarpetaB1
FicheroB1
FicheroB2
El caso...
WITH OBJECT oZip := TZipFile():New()
:lRecurse := .T.
Guarda TODOS los archivos correctamente, PERO me pone el path completo de la ubicación de los archivos.
Así pues esta copia por ejemplo la guardaria en
CarpetaPrueba+CarpetaOtra+CarpetaA...
Lo que necesito es que guarde la ubicación, SI pero SOLO A PARTIR DE DESDE ESTOY HACIENDO LA COPIA. Vaya, como hace Winzip o cualquier compresor de archivos.
Lo que seria en la CarpetaA
(lIncludePath por defecto esta en .T.)
Si lIncludePath lo establezco a .f., los ficheros se guardan, pero sin carpetas contenedoras.
Para este menester, dispongo de un ZipArchive del 10/12/2012 que me está funcionando, PERO estaria correcto que el mismo Xailer funcionara de esta forma, no???
No se si me explico.
https://www.xailer.com/forum/viewtopic. ... 437#p53096
*************************************************************************************
Resulta que lo que busco es hacer una copia de mis ficheros que estan en una carpeta
CarpetaA
FicheroA01
FicheroA02
CarpetaB1
FicheroB1
FicheroB2
El caso...
WITH OBJECT oZip := TZipFile():New()
:lRecurse := .T.
Guarda TODOS los archivos correctamente, PERO me pone el path completo de la ubicación de los archivos.
Así pues esta copia por ejemplo la guardaria en
CarpetaPrueba+CarpetaOtra+CarpetaA...
Lo que necesito es que guarde la ubicación, SI pero SOLO A PARTIR DE DESDE ESTOY HACIENDO LA COPIA. Vaya, como hace Winzip o cualquier compresor de archivos.
Lo que seria en la CarpetaA
(lIncludePath por defecto esta en .T.)
Si lIncludePath lo establezco a .f., los ficheros se guardan, pero sin carpetas contenedoras.
Para este menester, dispongo de un ZipArchive del 10/12/2012 que me está funcionando, PERO estaria correcto que el mismo Xailer funcionara de esta forma, no???
No se si me explico.
Un Saludo,
Xevi.
Xevi.
- ignacio
- Site Admin
- Mensajes: 9447
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Re: TZip() en Xailer 5
Buenos días,
Te ruego pruebes el ejemplo \samples\Testzip. Entiendo que está funcionando correctamente:
Saludos
Te ruego pruebes el ejemplo \samples\Testzip. Entiendo que está funcionando correctamente:
Saludos
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Re: TZip() en Xailer 5
Pues no... no lo hace correctamente, de ahí mi post.
Usando el Sample ZipArchive...
Selecciono la carpeta a comprimir... Samples ubicada en C:\Xailer.
SOLO QUIERO LA CARPETA "Samples" y sus ficheros i carpetas que contiene.
Selecciono destino del fichero zip, prova.zip ubicada en Escritorio.
Le doy al botón ZIP y se ejecuta el empaquetado de carpeta y archivos.
Bien, el resultado que obtengo es como adjunto en la imagen.
Se guarda la carpeta Xailer, dentro de ella está solo la carpeta Samples y dentro Samples todos los archivos y carpetas que contiene...
CUANDO deberia de guardarse SOLO la carpeta Samples y dentro de ella todos los archivos y carpetas que contiene.
O sea, que guarda la carpeta PARENT de Samples, cuando NO DEBERIA.
Usando el Sample ZipArchive...
Selecciono la carpeta a comprimir... Samples ubicada en C:\Xailer.
SOLO QUIERO LA CARPETA "Samples" y sus ficheros i carpetas que contiene.
Selecciono destino del fichero zip, prova.zip ubicada en Escritorio.
Le doy al botón ZIP y se ejecuta el empaquetado de carpeta y archivos.
Bien, el resultado que obtengo es como adjunto en la imagen.
Se guarda la carpeta Xailer, dentro de ella está solo la carpeta Samples y dentro Samples todos los archivos y carpetas que contiene...
CUANDO deberia de guardarse SOLO la carpeta Samples y dentro de ella todos los archivos y carpetas que contiene.
O sea, que guarda la carpeta PARENT de Samples, cuando NO DEBERIA.
- Adjuntos
-
- Captura.JPG (83.86 KiB) Visto 6801 veces
Un Saludo,
Xevi.
Xevi.
- ignacio
- Site Admin
- Mensajes: 9447
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Re: TZip() en Xailer 5
Buenos días,
Tiene sentido lo que dices. Te ruego pruebes con el fichero adjunto; pero me da muchísimo miedo romper código existente. Os ruego a todos los que uséis está clase y estéis actualizados a la última versión de Xailer o tengáis intención de hacerlo que probéis si vuestros programas funcionan correctamente. Muchas gracias.
En cualquier caso creo que la sugerencia de Xevi es correcta.
Un saludo
Tiene sentido lo que dices. Te ruego pruebes con el fichero adjunto; pero me da muchísimo miedo romper código existente. Os ruego a todos los que uséis está clase y estéis actualizados a la última versión de Xailer o tengáis intención de hacerlo que probéis si vuestros programas funcionan correctamente. Muchas gracias.
En cualquier caso creo que la sugerencia de Xevi es correcta.
Un saludo
- Adjuntos
-
- ZipArchive.rar
- (4.03 KiB) Descargado 261 veces
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Re: TZip() en Xailer 5
Ignacio,
CASI !!!
Ahora te guarda TODOS los archivos de la carpeta (en este supuesto archivos y carpetas de la carpeta Samples ubicado en C:\Xailer)
PERO los guarda en la raiz del zip... no se guarda en la carpeta Samples.
Lo que falta es "encapsular" los archivos en la carpeta.
O sea, lo que deberia de guardar es los archivos de "Folder to zip:" en el archivo "Zip file to create:" creando una carpeta en el zip del mismo nombre de la Carpeta seleccionada en "Folder to zip:" SOLO el nombre de la Carpeta... dentro TODOS los archivos y carpetas.
Es como funcionaba hasta Xailer2, creo (yo tengo el ZipArchive.prg del 2012 que es el que estoy utilizando para que me haga las copias correctamente) y como es lo que hace si comprimes una carpeta desde el explorador de Windows mismo... te crea un zip, con una carpeta en la que ubica TODOS los archivos y carpetas incluidos en la misma
Supongo que me entiendes,...
CASI !!!
Ahora te guarda TODOS los archivos de la carpeta (en este supuesto archivos y carpetas de la carpeta Samples ubicado en C:\Xailer)
PERO los guarda en la raiz del zip... no se guarda en la carpeta Samples.
Lo que falta es "encapsular" los archivos en la carpeta.
O sea, lo que deberia de guardar es los archivos de "Folder to zip:" en el archivo "Zip file to create:" creando una carpeta en el zip del mismo nombre de la Carpeta seleccionada en "Folder to zip:" SOLO el nombre de la Carpeta... dentro TODOS los archivos y carpetas.
Es como funcionaba hasta Xailer2, creo (yo tengo el ZipArchive.prg del 2012 que es el que estoy utilizando para que me haga las copias correctamente) y como es lo que hace si comprimes una carpeta desde el explorador de Windows mismo... te crea un zip, con una carpeta en la que ubica TODOS los archivos y carpetas incluidos en la misma
Supongo que me entiendes,...
Un Saludo,
Xevi.
Xevi.
Re: TZip() en Xailer 5
Mirando la modificación que has hecho...
IF Empty( nPos )
// IF ( nPos := At( "\", cPath ) ) > 0 // Only one path, the common path will be the drive letter
IF ( nPos := Rat( "\", cPath ) ) > 0 // Only one path, the comman path will be that path
cPath := Left( cPath, nPos )
ENDIF
ELSE
IF ( nPos := RAt( "\", cPath ) ) > 0
cPath := Left( cPath, nPos )
ENDIF
ENDIF
*********************************************
Si Empty( nPos ) o !Empty( nPos )... terminan haciendo lo mismo.
No sirve!!!
Si Empty( nPos )
... deberia de quedarse con el nombre de la Carpeta seleccionada, y añadirla al zip.
IF Empty( nPos )
// IF ( nPos := At( "\", cPath ) ) > 0 // Only one path, the common path will be the drive letter
IF ( nPos := Rat( "\", cPath ) ) > 0 // Only one path, the comman path will be that path
cPath := Left( cPath, nPos )
ENDIF
ELSE
IF ( nPos := RAt( "\", cPath ) ) > 0
cPath := Left( cPath, nPos )
ENDIF
ENDIF
*********************************************
Si Empty( nPos ) o !Empty( nPos )... terminan haciendo lo mismo.
No sirve!!!
Si Empty( nPos )
... deberia de quedarse con el nombre de la Carpeta seleccionada, y añadirla al zip.
Un Saludo,
Xevi.
Xevi.
- ignacio
- Site Admin
- Mensajes: 9447
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Re: TZip() en Xailer 5
Buenas tardes,
Olvídate de mi última subida y simplemente utiliza la propiedad lMaskComPath a .T.
Saludos
Olvídate de mi última subida y simplemente utiliza la propiedad lMaskComPath a .T.
Saludos
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Re: TZip() en Xailer 5
Ignacio,
He quitado el fichero ZipArchive.prg del proyecto del Sample de Xailer.
Lo he puesto así en el Sample de Xailer...
Ni a .T. ni a .F.
El resultado final SIEMPRE es el mismo.
la imagen que te he enviado antes de que modificaras la clase.
INCLUYE TODA LA RUTA RELATIVA desde Xailer...
Y solo le doy a guardar la carpeta Samples!!!
He quitado el fichero ZipArchive.prg del proyecto del Sample de Xailer.
Lo he puesto así en el Sample de Xailer...
Código: Seleccionar todo
METHOD Button2Click( oSender ) CLASS TForm1
LOCAL cSrcFile, cTrgFile
cSrcFile := ::oEdit1:cText + "\*.*"
cTrgFile := ::oEdit2:cText
WITH OBJECT TZipFile():Create()
:lMasksComPath := .T.
:aFileMask := { cSrcFile }
:cFileName := cTrgFile
//:cPassword := "test"
:lRecurse := .t.
//:lIncludePath := .f.
::oProgressBar1:nValue := 0
::oProgressBar1:nMax := :FilesSize()
::oButton2:lEnabled := .F.
:OnProgress := "ProgressZip"
:OnChangeFile := "ChangeFileZip"
IF :Run()
Msginfo( "Zip file " + cTrgFile + " created correctly" )
ELSE
MsgAlert( "Zip file " + cTrgFile + " not created correctly" )
ENDIF
::oButton2:lEnabled := .T.
END WITH
::oProgressBar1:nValue := 0
RETURN Nil
El resultado final SIEMPRE es el mismo.
la imagen que te he enviado antes de que modificaras la clase.
INCLUYE TODA LA RUTA RELATIVA desde Xailer...
Y solo le doy a guardar la carpeta Samples!!!
Un Saludo,
Xevi.
Xevi.
Re: TZip() en Xailer 5
Así, pues... imaginemos que quiero guardar en zip la carpeta "Source" que está ubicada en "C:\Xailer\Samples\GlassBtn"
Lo normal que deberia de hacer.
Crear un Zip con una Carpeta "Source" y en ella, TODOS los archivos y carpetas de su interior.
Si???
Pues lo que hace es, Crear un archivo Zip
con una carpeta "Xailer"
que en su interior contiene una carpeta "Samples"
que en su interior contiene una carpeta "GlassBtn"
y ya finalmente SI... que en su interior contiene una carpeta "Source" y en ella, TODOS los archivos y carpetas de su interior.
ABSURDO, no???
Lo normal que deberia de hacer.
Crear un Zip con una Carpeta "Source" y en ella, TODOS los archivos y carpetas de su interior.
Si???
Pues lo que hace es, Crear un archivo Zip
con una carpeta "Xailer"
que en su interior contiene una carpeta "Samples"
que en su interior contiene una carpeta "GlassBtn"
y ya finalmente SI... que en su interior contiene una carpeta "Source" y en ella, TODOS los archivos y carpetas de su interior.
ABSURDO, no???
Un Saludo,
Xevi.
Xevi.
- ignacio
- Site Admin
- Mensajes: 9447
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Re: TZip() en Xailer 5
No veo en tu código nada respecto a:
No obstante, estoy de acuerdo que incluso con lMasComPath a .F. no debería funcionar como lo hace actualmente. Pero prefiero no tocarlo si no es necesario.
Saludos
Código: Seleccionar todo
lMaskComPath a .T.
Saludos
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Re: TZip() en Xailer 5
METHOD Button2Click( oSender ) CLASS TForm1
LOCAL cSrcFile, cTrgFile
cSrcFile := ::oEdit1:cText + "\*.*"
cTrgFile := ::oEdit2:cText
WITH OBJECT TZipFile():Create()
:lMasksComPath := .T.
:aFileMask := { cSrcFile }
:cFileName := cTrgFile
//:cPassword := "test"
:lRecurse := .t.
//:lIncludePath := .f.
::oProgressBar1:nValue := 0
::oProgressBar1:nMax := :FilesSize()
::oButton2:lEnabled := .F.
:OnProgress := "ProgressZip"
:OnChangeFile := "ChangeFileZip"
IF :Run()
Msginfo( "Zip file " + cTrgFile + " created correctly" )
ELSE
MsgAlert( "Zip file " + cTrgFile + " not created correctly" )
ENDIF
::oButton2:lEnabled := .T.
END WITH
::oProgressBar1:nValue := 0
RETURN Nil
LOCAL cSrcFile, cTrgFile
cSrcFile := ::oEdit1:cText + "\*.*"
cTrgFile := ::oEdit2:cText
WITH OBJECT TZipFile():Create()
:lMasksComPath := .T.
:aFileMask := { cSrcFile }
:cFileName := cTrgFile
//:cPassword := "test"
:lRecurse := .t.
//:lIncludePath := .f.
::oProgressBar1:nValue := 0
::oProgressBar1:nMax := :FilesSize()
::oButton2:lEnabled := .F.
:OnProgress := "ProgressZip"
:OnChangeFile := "ChangeFileZip"
IF :Run()
Msginfo( "Zip file " + cTrgFile + " created correctly" )
ELSE
MsgAlert( "Zip file " + cTrgFile + " not created correctly" )
ENDIF
::oButton2:lEnabled := .T.
END WITH
::oProgressBar1:nValue := 0
RETURN Nil
Un Saludo,
Xevi.
Xevi.
Re: TZip() en Xailer 5
Si no lo cambiais en la clase de Xailer... me puedes decir que cambio y así lo modifico en la clase y la incluyo en mis aplicaciones ???
Gracias.
Gracias.
Un Saludo,
Xevi.
Xevi.
- ignacio
- Site Admin
- Mensajes: 9447
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Re: TZip() en Xailer 5
Este código debería funcionar (líneas 299 y siguientes de ZipArchive.prg):
Espero que ahora esté bien.
Saludos
Código: Seleccionar todo
IF Empty( nPos )
IF ( nPos := Rat( "\", cPath ) ) > 0 // Quitamos la máscara si la hubiese
cPath := Left( cPath, nPos - 1 )
IF ( nPos := Rat( "\", cPath ) ) > 0 // Retrocedemos un directorio
cPath := Left( cPath, nPos )
ELSE
cPath += "\"
ENDIF
ENDIF
ELSE
IF ( nPos := RAt( "\", cPath ) ) > 0
cPath := Left( cPath, nPos )
ENDIF
ENDIF
Saludos
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Re: TZip() en Xailer 5
PERFECTO!!!
El Sample de ZipArchive ya hace lo que deberia, segun mi criterio y como se guardan las copias por ejemplo utilizando el boton derecho encima de una carpeta con el Explorador de archivos... enviar a carpeta comprimida en zip.
Así lo he dejado, por si no se incluye en la clase original de TZipFile() y alguien más lo pudiera necesitar.
Gracias.
El Sample de ZipArchive ya hace lo que deberia, segun mi criterio y como se guardan las copias por ejemplo utilizando el boton derecho encima de una carpeta con el Explorador de archivos... enviar a carpeta comprimida en zip.
Así lo he dejado, por si no se incluye en la clase original de TZipFile() y alguien más lo pudiera necesitar.
Código: Seleccionar todo
METHOD CommonMaskPath() CLASS XZipFile
LOCAL cPath, cMask
LOCAL nLen, nPos, nFor
IF ValType( ::FaFileMask ) == "C"
::FaFileMask := { ::FaFileMask }
ENDIF
cPath := ::FaFileMask[ 1 ]
FOR nFor := 2 TO Len( ::FaFileMask )
cMask := ::FaFileMask[ nFor ]
nPos := 1
nLen := Min( Len( cPath ), Len( cMask ) )
DO WHILE nPos <= nLen
IF Upper( Left( cPath, nPos ) ) == Upper( Left( cMask, nPos ) )
nPos++
ELSE
EXIT
ENDIF
ENDDO
cPath := Left( cPath, nPos - 1 )
IF Empty( cPath )
EXIT
ENDIF
NEXT
IF Empty( nPos ) // Only one path, the common path will be the drive letter
// IF ( nPos := At( "\", cPath ) ) > 0
// cPath := Left( cPath, nPos )
// ENDIF
//Cambio Solicitado a Ignacio para NO incluir TODA la ruta relativa de la carpeta/archivos a zipear
IF ( nPos := Rat( "\", cPath ) ) > 0 // Quitamos la máscara si la hubiese
cPath := Left( cPath, nPos - 1 )
IF ( nPos := Rat( "\", cPath ) ) > 0 // Retrocedemos un directorio
cPath := Left( cPath, nPos )
ELSE
cPath += "\"
ENDIF
ENDIF
ELSE
IF ( nPos := RAt( "\", cPath ) ) > 0
cPath := Left( cPath, nPos )
ENDIF
ENDIF
RETURN cPath
Un Saludo,
Xevi.
Xevi.
- ignacio
- Site Admin
- Mensajes: 9447
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Re: TZip() en Xailer 5
Xevi,
No te preocupes. Se incluirá en la siguiente actualización a no ser que algún usuario nos muestre un gran perjuicio por el cambio.
Un saludo
No te preocupes. Se incluirá en la siguiente actualización a no ser que algún usuario nos muestre un gran perjuicio por el cambio.
Un saludo
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Re: TZip() en Xailer 5
Perfecto!!!
Una cosa a "arreglar" / "cambiar" en la descarga de Xailer... el Sample ZipArchive.
El proyecto incluye el ZipArchive.prg de SourceXailer...
<Files>
<File Filename="TestZip.prg"/>
<File Filename="Form1.prg"/>
<File Filename="..\..\..\source\ZipArchive.prg"/>
</Files>
No deberia, ya que TZipFile() ya es una clase incluida en Xailer... y además, quien se descargue la demo, no le va a compilar!!!
Una cosa a "arreglar" / "cambiar" en la descarga de Xailer... el Sample ZipArchive.
El proyecto incluye el ZipArchive.prg de SourceXailer...
<Files>
<File Filename="TestZip.prg"/>
<File Filename="Form1.prg"/>
<File Filename="..\..\..\source\ZipArchive.prg"/>
</Files>
No deberia, ya que TZipFile() ya es una clase incluida en Xailer... y además, quien se descargue la demo, no le va a compilar!!!
Un Saludo,
Xevi.
Xevi.
- ignacio
- Site Admin
- Mensajes: 9447
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Re: TZip() en Xailer 5
Buenas tardes,
Es un error nuestro. Realmente no es necesario dicho archivo en el proyecto. Esta ahí para poder depurar el código cómodamente. Se quitará en la próxima actualización.
Un saludo
Es un error nuestro. Realmente no es necesario dicho archivo en el proyecto. Esta ahí para poder depurar el código cómodamente. Se quitará en la próxima actualización.
Un saludo
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com