Page 1 of 1

Copiar Carpeta/Directorio

PostPosted: Sat Aug 20, 2011 12:12 am
by RodolfoRBG
Existe alguna instruccion que invoque a la funcion de Windows para copiar una carpeta completa (archivos y subdirectorios) de un HD a un USB?

Lo puedo hacer "a mano" pero no quiero inventar el hilo negro.

Salu2 y gracias.

Re: Copiar Carpeta/Directorio

PostPosted: Mon Aug 22, 2011 2:28 pm
by FranciscoA
Rodolfo mira esto, tal vez es lo que quieres.
viewtopic.php?f=3&t=22218#p118291
Saludos.

Re: Copiar Carpeta/Directorio

PostPosted: Mon Aug 22, 2011 3:03 pm
by karinha
Francisco, en la práctica sería como?

Re: Copiar Carpeta/Directorio

PostPosted: Mon Aug 22, 2011 9:08 pm
by FranciscoA
karinha wrote:Francisco, en la práctica sería como?


Puedes hacerlo asi: (Recuerda enlazar Shell32.lib del directorio de Borlan)

//------------------
Function Prueba()
local cDirDest := "C:\FRANCISCO\DOCUMENTOS\DIVERSOS\"

ShCreateDirectory( cDirDest )

Return Nil


#pragma BEGINDUMP

#include <shlobj.h>
#include <hbapi.h>

HB_FUNC (SHCREATEDIRECTORY)
{
hb_retni( SHCreateDirectoryEx( NULL, hb_parc( 1 ), NULL ) );
}

#pragma ENDDUMP

Saludos.

Re: Copiar Carpeta/Directorio

PostPosted: Mon Aug 22, 2011 9:59 pm
by acuellar
Francisco

Con esta función se crea la cadena de directorios/folders.

Lo que pide Rodolfo es copiar todo el contenido

Algo asi:

Code: Select all  Expand view

LMKDIR "D:\SISTEMAS"
WaitRun("XCopy C:\SISTEMAS\*.* D:\SISTEMAS /S",0)
 


Saludos,

Adhemar

Re: Copiar Carpeta/Directorio

PostPosted: Tue Aug 23, 2011 8:48 am
by RodolfoRBG
Francisco, gracias por responder, Adhemar, gracias por tu solucion.

Buscaba mas bien que fuera Windows quien hiciera la copia en su dialogo con animacion, meter, etc, pero la solucion que me das es muy practica. Gracias.

Salu2

Re: Copiar Carpeta/Directorio

PostPosted: Tue Aug 23, 2011 12:04 pm
by sambomb
DirectoryRecurse(<cDisSpec>,[<cAttributes>])

This function return an array with all files and internal folders(with all files)
Then all you have to do is create the folders and move the files...

Code: Select all  Expand view


//cOrigin := "C:\Test\"
//cDestiny := "D:\Test\"

aFiles := DirectoryRecurse(cOrigin)

For i := 1 to Len(aFiles)

   If IsDirectory(aFiles[i,1])
      MakeDir(StrTran(aFiles[i,1],cOrigin, cDestiny))
   else
      CopyFile(aFiles[i,1],StrTran(aFiles[i,1],cOrigin, cDestiny))
   end

end
 

Re: Copiar Carpeta/Directorio

PostPosted: Tue Aug 23, 2011 3:21 pm
by acuellar
Thanks Sabomb

The sample don't work

This work
Code: Select all  Expand view

#Include "FiveWin.ch"
*
Function Main()
  cOrigen:="C:\SISTEMAS\*";cDestino:="D"
  aFiles := DirectoryRecurse(cOrigen)

  For i := 1 to Len(aFiles)
   cFile:=aFiles[i,1]
   cDir:=cDestino+Subs(cFilePath(cFile),2,Len(cFile))
   makedir(cDir)
   LZCOPYFILE( cOrigen,cDestino+Subs(cFile,2,Len(cFile)) )
 Next I
 MsgAlert("Se copiaron "+Str(I,3)+" archivos")

return nil
 


Regards,

Adhemar

Re: Copiar Carpeta/Directorio

PostPosted: Tue Aug 23, 2011 8:17 pm
by RodolfoRBG
Gracias jovenes, pero a mi:

XBROWSE(DirectoryRecurse("C:\Prueba"))
XBROWSE(DirectoryRecurse("C:\Prueba*"))
XBROWSE(DirectoryRecurse("C:\Prueba\"))
XBROWSE(DirectoryRecurse("C:\Prueba\*"))
XBROWSE(DirectoryRecurse("C:\Prueba\*.*"))
XBROWSE(DirectoryRecurse("C:\Prueba",'D'))
XBROWSE(DirectoryRecurse("C:\Prueba*",'D'))
XBROWSE(DirectoryRecurse("C:\Prueba\",'D'))
XBROWSE(DirectoryRecurse("C:\Prueba\*",'D'))
XBROWSE(DirectoryRecurse("C:\Prueba\*.*",'D'))

me regresa un arreglo vacio en cada caso

Re: Copiar Carpeta/Directorio

PostPosted: Tue Aug 23, 2011 8:53 pm
by acuellar
Rodolfo,

Funciona, has prueba con el ejemplo.

Saludos,

Adhemar

Re: Copiar Carpeta/Directorio

PostPosted: Tue Aug 23, 2011 10:33 pm
by FranciscoA
Amigos, el ejemplo de Cuellar funciona asi: cOrigen:="C:\SISTEMAS\*";cDestino:="D". Es rapidisimo (5800 files no grandes, en 5 segundos, en mi pobre equipo), pero...
así, no: cOrigen:="C:\SISTEMAS\BANCOS\*";cDestino:="D" (por ejemplo)

Re: Copiar Carpeta/Directorio

PostPosted: Tue Aug 23, 2011 11:26 pm
by acuellar
Francisco,
con la función que colocaste funciona
Sería asi:
Code: Select all  Expand view

#Include "FiveWin.ch"
*
Function Main()
  cOrigen:="D:\SISTEMAS\BANCOS\*";cDestino:="C"
  aFiles := DirectoryRecurse(cOrigen)

  For i := 1 to Len(aFiles)
   cFile:=aFiles[i,1]
   cDir:=cDestino+Subs(cFilePath(cFile),2,Len(cFile))
   ShCreateDirectory( cDir )

   LZCOPYFILE( cOrigen,cDestino+Subs(cFile,2,Len(cFile)) )
 Next I
 MsgAlert("Se copiaron "+Str(I,3)+" archivos")
 XBROWSE(aFiles)
return nil
 
#pragma BEGINDUMP

#include <shlobj.h>
#include <hbapi.h>

HB_FUNC (SHCREATEDIRECTORY)
{
 hb_retni( SHCreateDirectoryEx( NULL, hb_parc( 1 ), NULL ) );
}

#pragma ENDDUMP
 


No olvidar enlazar la librería SHELL32.LIB DE BCC

Saludos,

Adhemar

Re: Copiar Carpeta/Directorio

PostPosted: Wed Aug 24, 2011 1:54 am
by FranciscoA
Correcto, Adhemar. ¡Funciona! Gracias.
Saludos.