Copiado de archivos y carpetas

Iniciado por Gorky, 21 Noviembre 2007, 15:01 PM

0 Miembros y 1 Visitante están viendo este tema.

Gorky

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.

cassiani

#1
 Puedes hacerlo así:

Código (vb) [Seleccionar]
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

Gorky

#2
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¡

cassiani

#3
 Uhm... no recuerdo... hace tiempo para salir del paso consegui hacer esto a partir de un códe del maestro 'Guille':

formulario:
Código (vb) [Seleccionar]
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:
Código (vb) [Seleccionar]
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.