Newsgroup: it.comp.appl.access
Titolo: backup di una cartella

Salve a tutti, è possibile attraverso un pulsante di una maschera fare il backup di una cartella del computer con sotto cartelle e file ?
Grazie

Si eccome... ma non fa tutto da solo il pulsante...
Purtroppo essendoci come dici le SubFolders è necessario appoggiarsi a FILESYSTEMOBJECT...
 
Prova una cosa simile:
 
Dim objFSO As Object
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.copyFolder "C:\Pathsource\folder", "C:\Pathdestination\"


grazie Alex
il tutto funziona perfettamente.....
e se le cose da copiare sono molte e quindi ci vuole un po' di tempo, come posso mettere una progress bar che mi segnala lo status dell'avanzamento ?

Quello è un processo Asincrono e non puoi... per farlo servirebbe usare le Api che consentono una funzione di CallBack oppure chiamare sempre le API per usare la funzione di copia che accede direttamente il dialogo con barra di progressione.
Tuttavia fossi in te ci rifletterei bene...
 
@ALEX

Il giorno sabato 3 dicembre 2016 19:19:48 UTC+1, @Alex ha scritto:

ma anche questa dovrebbe essere OT : e perchè non ti scandalizzi 
allora ? Lui non una "male" l' NG ? 
 

Non confondere le cose... quanto meno fai finta di capire.
 
grazie.
@ALEX


Dunque vediamo se è possibile usare altri metodi.... per esempio posso far partire una msgbox che dura per tutto il tempo della copia ?

 Dunque vediamo se è possibile usare altri metodi.... per esempio posso far partire una msgbox che dura per tutto il tempo della copia ?
 
Ma no lascia stare cose che non vanno bene, se il processo è ASINCRONO non potrai mai azzeccare i tempi che dipendono da troppi fattori.
 
Prova questo:
 
Per la copia dei File specie se di grosse dimensioni sarebbe utile avere a disposizione la barra di progressione o almeno la percentuale di avanzamento dell'azione...!
 
Per questo si può sfruttare la fuzione di Apertura di un file in formato Binario
e la scrittura sequenziale....!
Questa tecnica è pessima per prestazioni.
 
Le API ci mettono a disposizione una funzione estesa che consente la copia di un file esistene in un nuovo preservando completamente gli Extended Attribute, solamente gli attributi di sicurezza non vengono copiati....!
 
CopyFileEx
Questa funzione consete di passare come parametro una funzione di CallBack, che nel nostro caso sfruttiamo proprio per l'aggiornamento dello stato di avanzamento della copia.
 
CODICE
 
 
' ==========================================
' Codice da mettere nella Maschera
' ==========================================
Option Compare Database
Option Explicit
 
Private Const EVENTLOG_SUCCESS = &H0
Private Const EVENTLOG_ERROR_TYPE = &H1
Private Const EVENTLOG_WARNING_TYPE = &H2
Private Const EVENTLOG_INFORMATION_TYPE = &H4
Private Const EVENTLOG_AUDIT_SUCCESS = &H8
Private Const EVENTLOG_AUDIT_FAILURE = &H10
Private Const EVENTLOG_SEQUENTIAL_READ = &H1
 
Private Sub cmdStart_Click()
   Dim ret
   'Inizia la fase di Copia
   ret = CopyFileEx("C:\FileOr.pdf", "C:\FileDest.pdf", _
                       AddressOf CopyProgressRoutine, _
                       ByVal 0&, _
                       bCancel, _
                       COPY_FILE_RESTARTABLE)
   'Mostra l'esito
   Me.lblCopy.Caption = "Filecopy completed " + IIf(ret = 0, "(ERROR/ABORTED)", "successfully")
End Sub
 
Private Sub cmdStop_Click()
    'Interagisce con la Funzione di CallBack per Abortire la Copia
    bCancel = 1
End Sub
 
' ==========================================
' Codice da mettere in un Modulo Standard
' ==========================================
Option Compare Database
Option Explicit
 
Public Const PROGRESS_CANCEL = 1
Public Const PROGRESS_CONTINUE = 0
Public Const PROGRESS_QUIET = 3
Public Const PROGRESS_STOP = 2
Public Const COPY_FILE_FAIL_IF_EXISTS = &H1
Public Const COPY_FILE_RESTARTABLE = &H2
 
Public Declare Function CopyFileEx Lib "kernel32.dll" _
                        Alias "CopyFileExA" _
                        (ByVal lpExistingFileName As String, _
                        ByVal lpNewFileName As String, _
                        ByVal lpProgressRoutine As Long, _
                        lpData As Any, _
                        ByRef pbCancel As Long, _
                        ByVal dwCopyFlags As Long) As Long
 
' Variabile per l'annullamento dell'Azione
Public bCancel As Long
 
Public Function CopyProgressRoutine(ByVal TotalFileSize As Currency, _
                        ByVal TotalBytesTransferred As Currency, _
                        ByVal StreamSize As Currency, _
                        ByVal StreamBytesTransferred As Currency, _
                        ByVal dwStreamNumber As Long, _
                        ByVal dwCallbackReason As Long, _
                        ByVal hSourceFile As Long, _
                        ByVal hDestinationFile As Long, _
                        ByVal lpData As Long) As Long
    'Aggiorna la Caption nella Form Attiva
    Screen.ActiveForm.Caption = CStr(Int((TotalBytesTransferred * 10000) / (TotalFileSize * 10000) * 100)) + "% complete..."
    'Consente iterazioni utente(come il Pulsante di STOP)
    DoEvents
    'prosegue la copia
    CopyProgressRoutine = PROGRESS_CONTINUE
 
 
@Alex

Ovviamente questo copia 1 File, evi implementare la ricorsione per lo Scanning delle Cartelle... 
 
Altrimenti se usi il Sistema Operativo conviene questo:
Public Declare Function SHFileOperation Lib "shell32.dll" _
Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long
 
Public Const FO_COPY = &H2
 
Public Type SHFILEOPSTRUCT
    hWnd As Long
    wFunc As Long
    pFrom As String
    pTo As String
    fFlags As Integer
    fAnyOperationsAborted As Long
    hNameMappings As Long
    lpszProgressTitle As Long
End Type
 
Public Sub VBCopyFolder(ByRef strSource As String, ByRef strTarget As String)
    Dim op As SHFILEOPSTRUCT
 
    With op
        .wFunc = FO_COPY
        .pTo = strTarget
        .pFrom = strSource
        .fFlags = FOF_SIMPLEPROGRESS
    End With
 
    '~~> Perform operation
    SHFileOperation op
End Sub
 
Private Sub Sample()
    '~~> Copy Folders
    Call VBCopyFolder("C:\Temp1", "C:\Temp2")
End Sub
 
@Alex

>>>>  
http://www.bb2002.it
 :)  <<<<<
........... [ al lavoro ] ...........

Che poi era lo stesso suggerito all'inizio.... ma non ha il callback per la progressione sincrona...
 
@ALEX

 
 
yes, volevo solo dare il link del comando per mostrare che la sintassi non 
prevede un parametro che mostri in qualche modo l'andamento della copia
