FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Copiar Carpeta/Directorio
Posts: 257
Joined: Tue May 16, 2006 04:46 PM
Copiar Carpeta/Directorio
Posted: Sat Aug 20, 2011 12:12 AM

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.

RodolfoRBG
FWH 1307, xHarbour123 BCC582
rodolfoerbg@gmail.com
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: Copiar Carpeta/Directorio
Posted: Mon Aug 22, 2011 02:28 PM

Rodolfo mira esto, tal vez es lo que quieres.

viewtopic.php?f=3t=22218#p118291
Saludos.

&

Francisco J. Alegría P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Copiar Carpeta/Directorio
Posted: Mon Aug 22, 2011 03:03 PM

Francisco, en la práctica sería como?

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: Copiar Carpeta/Directorio
Posted: Mon Aug 22, 2011 09:08 PM
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.
Francisco J. Alegría P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 1710
Joined: Tue Oct 28, 2008 06:26 PM
Re: Copiar Carpeta/Directorio
Posted: Mon Aug 22, 2011 09:59 PM
Francisco

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

Lo que pide Rodolfo es copiar todo el contenido

Algo asi:

Code (fw): Select all Collapse
LMKDIR "D:\SISTEMAS"
WaitRun("XCopy C:\SISTEMAS\*.* D:\SISTEMAS /S",0)


Saludos,

Adhemar
Saludos,



Adhemar C.
Posts: 257
Joined: Tue May 16, 2006 04:46 PM
Re: Copiar Carpeta/Directorio
Posted: Tue Aug 23, 2011 08:48 AM

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

RodolfoRBG
FWH 1307, xHarbour123 BCC582
rodolfoerbg@gmail.com
Posts: 389
Joined: Mon Oct 13, 2008 11:26 AM
Re: Copiar Carpeta/Directorio
Posted: Tue Aug 23, 2011 12:04 PM
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 (fw): Select all Collapse
//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
Email: SamirSSabreu@gmail.com
xHarbour 1.2.3 + Fwhh 20.2
Posts: 1710
Joined: Tue Oct 28, 2008 06:26 PM
Re: Copiar Carpeta/Directorio
Posted: Tue Aug 23, 2011 03:21 PM
Thanks Sabomb

The sample don't work

This work
Code (fw): Select all Collapse
#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
Saludos,



Adhemar C.
Posts: 257
Joined: Tue May 16, 2006 04:46 PM
Re: Copiar Carpeta/Directorio
Posted: Tue Aug 23, 2011 08:17 PM

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

RodolfoRBG
FWH 1307, xHarbour123 BCC582
rodolfoerbg@gmail.com
Posts: 1710
Joined: Tue Oct 28, 2008 06:26 PM
Re: Copiar Carpeta/Directorio
Posted: Tue Aug 23, 2011 08:53 PM

Rodolfo,

Funciona, has prueba con el ejemplo.

Saludos,

Adhemar

Saludos,



Adhemar C.
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: Copiar Carpeta/Directorio
Posted: Tue Aug 23, 2011 10:33 PM
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)
Francisco J. Alegría P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 1710
Joined: Tue Oct 28, 2008 06:26 PM
Re: Copiar Carpeta/Directorio
Posted: Tue Aug 23, 2011 11:26 PM
Francisco,
con la función que colocaste funciona
Sería asi:
Code (fw): Select all Collapse
#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
Saludos,



Adhemar C.
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: Copiar Carpeta/Directorio
Posted: Wed Aug 24, 2011 01:54 AM

Correcto, Adhemar. ¡Funciona! Gracias.
Saludos.

Francisco J. Alegría P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql

Continue the discussion