Page 1 of 1
Copiar Carpeta/Directorio
Posted:
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
Posted:
Mon Aug 22, 2011 2:28 pm
by FranciscoA
Rodolfo mira esto, tal vez es lo que quieres.
viewtopic.php?f=3&t=22218#p118291Saludos.
Re: Copiar Carpeta/Directorio
Posted:
Mon Aug 22, 2011 3:03 pm
by karinha
Francisco, en la práctica sería como?
Re: Copiar Carpeta/Directorio
Posted:
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
Posted:
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
Posted:
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
Posted:
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
Posted:
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
Posted:
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
Posted:
Tue Aug 23, 2011 8:53 pm
by acuellar
Rodolfo,
Funciona, has prueba con el ejemplo.
Saludos,
Adhemar
Re: Copiar Carpeta/Directorio
Posted:
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
Posted:
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
Posted:
Wed Aug 24, 2011 1:54 am
by FranciscoA
Correcto, Adhemar. ¡Funciona! Gracias.
Saludos.