Título: Copiado de archivos y carpetas
Publicado por: Gorky en 21 Noviembre 2007, 15:01 pm
Buenas foreros. Necesito crear un programa que me haga copias de seguridad cada vez que lo ejecute. Simplemente lo que quiero es que al ejecutarse me copie todos los archivos y carpetas de un directorio y me lo pegue en otro. He estado probando con las funciones FileCopy y CopyFile pero ninguna de las dos me permite poner caracteres comodin. Supongo que lo que tengo que hacer es usar alguna funcion que vaya profundizando en los directorios y me devuelva la ruta de cada archivo. Se que esa funcion existe pero ni se cual es ni sabria como utilizarla. Gracias por cualquier aportacion.
Título: Re: Copiado de archivos y carpetas
Publicado por: cassiani en 21 Noviembre 2007, 16:23 pm
Puedes hacerlo así: Option Explicit Private Sub Main() Open "Copy.bat" For Output As #1 'Creamos un directorio de destino Print #1, "md c:\Copia_Segura" 'Nos ubicamos en el dorectorio del cual copiaremos x archivos Print #1, "cd \escritorio\Trabajo_Final" 'Copiamos... Print #1, "copy *.* c:\Copia_Segura /y" Close #1 'Ejecutamos el bat Shell ("Copy.bat"), vbHide Msgbox "Los archivos han sido copiados con exito!" End Sub
Título: Re: Copiado de archivos y carpetas
Publicado por: Gorky en 21 Noviembre 2007, 16:32 pm
Con un archivo por lotes no es complicado ya que el comando copy si admite comodines. Es cierto que con este codigo se hace lo que se pretende (aunque para que fuera correcto deberia ser: Print #1, "xcopy *.* c:\Copia_Segura /ye"
pero estoy interesado en hacerlo con funciones de VB sin tener que usar el shell. Muchas gracias de todos modos C@ss¡@n¡
Título: Re: Copiado de archivos y carpetas
Publicado por: cassiani en 21 Noviembre 2007, 17:03 pm
Uhm... no recuerdo... hace tiempo para salir del paso consegui hacer esto a partir de un códe del maestro 'Guille': formulario: Option Explicit Private Sub AsignarFlags() 'Ajustamos el valor del flag, según los requerimientos del programador iFlags = 0 + FOF_MULTIDESTFILES + FOF_NOCONFIRMATION + FOF_NOCONFIRMMKDIR + FOF_SILENT End Sub Private Sub Copia_de_Seguridad() On Error Resume Next 'Ponemos en marcha la detección de errores. Dim SHFileOp As SHFILEOPSTRUCT 'Asignar el valor de las opciones AsignarFlags sFicOri = "C:\Documents and Settings\Rey\Escritorio\Trabajo_Final\*.*" & vbNullChar & vbNullChar sFicDes = "C:\Copia_Segura" & vbNullChar & vbNullChar With SHFileOp .wFunc = FO_COPY 'Le indica que se va a copiar. .fFlags = iFlags 'Se le indican los flag a usar. .hWnd = Me.hWnd '. .pFrom = sFicOri 'Path del folder o fichero (completo) de origen. .pTo = sFicDes 'Path del folder o fichero (completo) de destino. .lpszProgressTitle = "Procesando" '"Copiando los ficheros especificados" End With Call SHFileOperation(SHFileOp) Err = 0 'Para dejar de detectar error On Local Error GoTo 0 'Liberamos la detección de errores de esta función End Sub Private Sub Form_Load() Copia_de_Seguridad MsgBox "Copia de seguridad realizada con exito!" End End Sub
modulo: Option Explicit Public Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" _ (lpFileOp As SHFILEOPSTRUCT) As Long Public sFicOri As String 'Para almacenar el path de Origen Public sFicDes As String 'Para almacenar el path de Destino Public iFlags As Long 'Opciones de la copia ' Variables, constantes y declaraciones para el API Public Type SHFILEOPSTRUCT hWnd As Long ' hWnd del formulario wFunc As Long ' Función a usar: FO_COPY, etc. pFrom As String ' Fichero(s) de origen pTo As String ' Fichero(s) de destino fFlags As Long 'Para Windows 2000/XP declararlo como Long, 9x declararlo como Integer. fAnyOperationsAborted As Boolean ' Si se ha cancelado hNameMappings As Long ' lpszProgressTitle As String ' Sólo si se usa FOF_SIMPLEPROGRESS End Type ' Constantes para FileOperation Public Enum eFO FO_COPY = &H2& ' Copiar FOF_MULTIDESTFILES = &H1& ' Multiples archivos de destino FOF_SILENT = &H4& ' No mostrar el progreso FOF_NOCONFIRMATION = &H10& ' No pedir confirmación FOF_NOCONFIRMMKDIR = &H200& ' No confirmar la creación de directorios End Enum
Si encuentro una forma más efectiva y que involucre menos code, la posteo... Ahora mismo no recuerdo y como dices que no te sirve el FileCopy... Saludos.
|