
Martinibianco
Members-
Posts
4 -
Joined
-
Last visited
Everything posted by Martinibianco
-
it works but don't solve my problem. http://www.autoitscript.com/forum/index.php?showtopic=55082
-
(Real) DirGetSize failed.
Martinibianco replied to Martinibianco's topic in AutoIt General Help and Support
Hi Weaponx.. the command used is: DirCopy ($dir_principale,$dir_backup1,1) it's a path and to tell the truth more than one (max 3: dir_principale, dir_altro1, dir_altro2) i have to work with some big files (think to Outlook .pst file, see attached image) and this is the script that copy files: (it works but it's a work in progress.. i have to improve routines) : CODE ; Leggo il percorso dei file da Backuppare $dir_backup1 = IniRead("Backup.ini", "Settings", "dir_backup1", "") ;Percorso Principale su cui archiviare la copia $dir_backup2 = IniRead("Backup.ini", "Settings", "dir_backup2", "") ;Percorso Locale con copia dei file $dir_principale = IniRead("Backup.ini", "Settings", "dir_principale", "") ;Percorso che contiene i file principali da salvare $dir_altro1 = IniRead("Backup.ini", "Settings", "dir_altro1", "") ;Percorso con altri file da salvare $dir_altro2 = IniRead("Backup.ini", "Settings", "dir_altro2", "") ;Percorso con altri file da salvare $copia_fatta = 0 $flag = 0 ;per "Barra.exe" azzero il controllo IniWrite("Backup.ini", "Flag", "controllo", "0") ;segno la data del "tentativo" di back-up IniWrite("Backup.ini", "Ultimo_Run", "tentativo", _Now()) SplashTextOn("Operazioni in corso.", "Controllo i Settaggi.", 250, 100, -1, -1, 32, "Verdana", 8) Sleep(3000) ;Controllo se è stata selezionata almeno una cartella d'origine if $dir_principale = "" And $dir_altro1 = "" And $dir_altro2 = "" then MsgBox(16, "Attenzione", "Non è stata selezionata una cartella d'origine." & @LF _ & "Verifica i settaggi del file Backup.ini") Exit EndIf ;Controllo se sono state inserite le directory di destinazione del back-up if $dir_backup1 = "" And $dir_backup2 = "" then MsgBox(16,"Avviso", "Non sono state inserite le directory" & @LF _ & "Verifica i settaggi del file Backup.ini") Exit EndIf #include <Date.au3> ;Per marcare la data di esecuzione sul file "Backup.ini" #include <Array.au3> ;Funzione utente per inizializzare una matrice (vedere messaggio finale con _ArrayCreate) Dim $size_pre1 Dim $size_pre2 Dim $size_post1 Dim $size_post2 Dim $size ;Copia File nella Directory "Locale" if $dir_backup2 <> "" Then $risposta = 0 ;Setto la variabile per le risposte ;Controllo cha la cartella "Locale" esista e.. $dir_status = DriveStatus($dir_backup2) ;..se non esiste la creo if $dir_status = "UNKNOWN" Then $risposta = MsgBox(35,"Avviso", "La directory " & $dir_backup2 & " non esiste!" & @LF _ & "Devo crearla?") Select Case $risposta = 6 ;YES -> Creo directory DirCreate($dir_backup2) MsgBox(64,"Avviso", "Ho creato la directory " & $dir_backup2) Call("Copiaggio2") $copia_fatta = 1 Case $risposta = 7 ;NO -> Non creo Directory MsgBox(64,"Avviso", "NON ho creato la directory " & $dir_backup2) $flag = $flag + 1 Case $risposta = 2 ;Cancel -> Esco dal programma MsgBox(64,"Avviso", "Termine Programma!") Exit EndSelect EndIf if $risposta = 0 then Call("Copiaggio2") EndIf ;Copio i file dalla cartella Locale (se settata) a quella sul Server (se settata) if $dir_backup1 <> "" Then $risposta = 0 ;Setto la variabile per le risposte ;Controllo cha la cartella "Remota" esista e.. $dir_status = DriveStatus($dir_backup1) ;..se non esiste la creo if $dir_status = "UNKNOWN" Then $risposta = MsgBox(35,"Avviso", "La directory " & $dir_backup1 & " non esiste!" & @LF _ & "Devo crearla?") Select Case $risposta = 6 ;YES -> Creo directory DirCreate($dir_backup1) MsgBox(64,"Avviso", "Ho creato la directory " & $dir_backup1) Call("Copiaggio1") Case $risposta = 7 ;NO -> Non creo Directory MsgBox(64,"Avviso", "NON ho creato la directory " & $dir_backup1) $flag = $flag + 1 Case $risposta = 2 ;Cancel -> Esco dal programma MsgBox(64,"Avviso", "Termine Programma!") Exit EndSelect EndIf if $risposta = 0 then Call("Copiaggio1") EndIf SplashTextOn("Operazioni in corso.", "Aggiorno file .ini", 250, 100, -1, -1, 32, "Verdana", 8) Sleep(3000) SplashOff() ;per "Barra.exe" azzero il controllo e segno l'ora del back-up IniWrite("Backup.ini", "Flag", "controllo", "0") IniWrite("Backup.ini", "Ultimo_Run", "eseguito", _Now()) ; Messaggio che riepiloga la dimensione dei file nella Directory prima e dopo il Back-Up (la routine lavora in modo da ;leggere la dimensione delle destinazioni solo 1 volta.. vedere funzioni call a fine listato) If $flag <> 2 Then ;Converto i valori archiviati nelle variabili circa i contenuti e le dimensioni delle directory di destinazione If $size_pre1 = "" Then $size_pre1 = _ArrayCreate(0, 0, 0) If $size_pre2 = "" Then $size_pre2 = _ArrayCreate(0, 0, 0) If $size_post1 = "" Then $size_post1 = _ArrayCreate(0, 0, 0) If $size_post2 = "" Then $size_post2 = _ArrayCreate(0, 0, 0) MsgBox(64, "Info", "Back-Up Terminato." & @LF & @LF _ & "Directory Sorgenti: " & @LF _ & $dir_principale & @LF _ & $dir_altro1 & @LF _ & $dir_altro2 & @LF & @LF _ & "Dati Prima del Back-up:" & @LF _ & "Sub-Directory nr.: " & $size_pre1[2] + $size_pre2[2] & @LF _ & "Nr. file contenuti: " & $size_pre1[1] + $size_pre2[1] & @LF _ & "Dimensione totale directory (Gb): " & Round(($size_pre1[0]/1024/1024/1000) + ($size_pre2[0]/1024/1024/1000),2) & @LF _ & @LF & "-----------------------" & @LF _ & "Directory di Destinazione: " & @LF _ & $dir_backup1 & @LF _ & $dir_backup2 & @LF & @LF _ & "Dati Dopo il Back-up:" & @LF _ & "Sub-Directory nr.: " & $size_post1[2] + $size_post2[2] & @LF _ & "Nr. file salvati: " & $size_post1[1] + $size_post2[1] & @LF _ & "Dimensione totale directory (Gb): " & Round(($size_post1[0]/1024/1024/1000) + ($size_post2[0]/1024/1024/1000),2)) Else MsgBox(64,"Avviso", "Non sono state inserite le directory" & @LF _ & "per l'archiviazione dei dati. Back-up non eseguito.") EndIf Exit Func Recuperadimensione() ; Recupero le informazioni sulla dimensione dei file nelle direcory del back-up e lo scrivo nel Backup.ini $size = 0 if $dir_principale <> "" then $size = $size + DirGetSize($dir_principale) if $dir_altro1 <> "" then $size = $size + DirGetSize($dir_altro1) if $dir_altro2 <> "" then $size = $size + DirGetSize($dir_altro2) $size = ($size/1024/1024) IniWrite("Backup.ini", "Dimensione", "dimfile", $size) EndFunc Func Copiaggio2() SplashTextOn("Operazioni in corso.", "Recupero la dimensione dei File" & @LF & "di cui fare il back-up", 250, 100, -1, -1, 32, "Verdana", 8) Sleep(3000) ; Recupero le informazioni sulla dimensione dei file nelle direcory del back-up e lo scrivo nel Backup.ini Recuperadimensione() ;Vuoto la directory SvuotaCartella($dir_backup2) SplashTextOn("Operazioni in corso.", "Copio File in " & @LF & $dir_backup2, 250, 100, -1, -1, 32, "Verdana", 8) Sleep(3000) ;per "Barra.exe" memorizzo di quale back-up (Locale) deve segnalare la % IniWrite("Backup.ini", "Flag", "controllo", "2") Run("Barra.exe") if $dir_principale <> "" Then DirCopy ($dir_principale,$dir_backup2,1) ;Sovrascrivo i file EndIf if $dir_altro1 <> "" Then DirCopy ($dir_altro1,$dir_backup2,1) ;Sovrascrivo i file EndIf if $dir_altro2 <> "" Then DirCopy ($dir_altro2,$dir_backup2,1) ;Sovrascrivo i file EndIf ; Recupero le nuove informazioni sui file della directory dopo il back-up secondario $size_post2 = DirGetSize($dir_backup2,1) EndFunc Func Copiaggio1() SplashTextOn("Operazioni in corso.", "Recupero la dimensione dei File" & @LF & "di cui fare il back-up", 250, 100, -1, -1, 32, "Verdana", 8) Sleep(3000) ; Recupero le informazioni sulla dimensione dei file nelle direcory del back-up e lo scrivo nel Backup.ini Recuperadimensione() ;Vuoto la directory SvuotaCartella($dir_backup1) SplashTextOn("Operazioni in corso.", "Copio File in " & @LF & $dir_backup1, 250, 100, -1, -1, 32, "Verdana", 8) Sleep(3000) ;per "Barra.exe" memorizzo di quale back-up (Server) deve segnalare la % IniWrite("Backup.ini", "Flag", "controllo", "1") Run("Barra.exe") ;Se ho già fatto una copia in una cartella "Locale" uso questa come sorgente... if $copia_fatta=1 then DirCopy($dir_backup2,$dir_backup1,1) ;Sovrascrivo i file con lo stesso nome Else ;altrimenti prendo i file dalle cartelle originali if $dir_principale <> "" Then DirCopy ($dir_principale,$dir_backup1,1) ;Sovrascrivo i file EndIf if $dir_altro1 <> "" Then DirCopy ($dir_altro1,$dir_backup1,1) ;Sovrascrivo i file EndIf if $dir_altro2 <> "" Then DirCopy ($dir_altro2,$dir_backup1,1) ;Sovrascrivo i file EndIf ; Recupero le nuove informazioni sui file della directory dopo il back-up principale $size_post1 = DirGetSize($dir_backup1,1) EndIf EndFunc Func SvuotaCartella($folder) SplashTextOn("Operazioni in corso.", "Cancello File nella directory " & @LF & $folder, 250, 100, -1, -1, 32, "Verdana", 8) Sleep(3000) ;Thanks to 'Pixel75' Local $search, $file, $attrib $search = FileFindFirstFile($folder & "\*.*") If $search <> -1 Then While 1 $file = FileFindNextFile($search) If @error Then ExitLoop $attrib = FileGetAttrib($folder & "\" & $file) If StringInStr($attrib, "D") Then DirRemove($folder & "\" & $file, 1) Else FileDelete($folder & "\" & $file) EndIf Wend EndIf EndFunc and this is the .ini file where i store the informations: CODE; Settaggio delle directory per il backup dei dati [settings] ;Percorso Principale che contiene i file da salvare dir_principale = "D:\Posta" ;Percorso 1 aggiuntivo con altri file da salvare dir_altro1 = "" ;Percorso 2 aggiuntivo con altri file da salvare dir_altro2 = "" ;Percorso 1 su cui archiviare la copia dei file (meglio Server) dir_backup1 = "\\Srv2003\studio m\OE Backup\Temp" ;Percorso 2 su cui fare una ulteriore copia dei file (meglio Locale) dir_backup2 = "C:\Posta" ;Flag per la barra progressiva [Flag] controllo =0 ;Dimensione dei file salvati in Mb [Dimensione] dimfile =23.9227409362793 ;Date di riferimento [ultimo_Run] tentativo =12/10/2007 20.04.28 eseguito =12/10/2007 20.05.07 and the script of Progress Bar (Barra.exe): CODE ;BARRA Progressiva per backup file $FlagGlobale = IniRead("Backup.ini", "Flag", "Controllo", "0") ;directory origine Select Case $FlagGlobale = 0 ;nessun valore -> fine MsgBox(16,"Attenzione", "Per il Back-Up bisogna eseguire Backup.exe" & @LF _ & "Barra.exe serve per visualizzare la barra % progressiva.") Exit Case $FlagGlobale = 1 ;back-up 1 (principale, server) $dir_dest = IniRead("Backup.ini", "Settings", "dir_backup1", "") ;directory destinazione Case $FlagGlobale = 2 ;back-up 2 (secondario, locale) $dir_dest = IniRead("Backup.ini", "Settings", "dir_backup2", "") ;directory destinazione EndSelect $start = IniRead("Backup.ini", "Dimensione", "dimfile", "") ;dimensione origine $stop = (DirGetSize($dir_dest)/1024) ;dimensione destinazione ProgressOn("Back-Up", "Avanzamento in corso...", "0 %", 180, 300, 16) Do sleep(1000) ;refresh ogni 1 secondi $i = Round(($stop / $start * 100),0) ProgressSet( $i, $i & " % - " & Round($stop, 2) & " Mb") ;Aggiorno la barra progressiva con % e Mb $stop = (DirGetSize($dir_dest)/1024) ;ri-controllo la dimensione della destinazione ; MsgBox(0, "dimensione cartella", "Origine: " & $start & @LF & "Destinazione: " & $stop) Until $stop >= $start ProgressSet(100 , "Operazione Terminata", "Finito!") sleep(500) ProgressOff() Exit Please be patient about mistakes.. :"> -
Hi Everybody i'm a newbie of Autoit (v.3.2.8.1) i have wrote 2 script to back-up folders (with Scite v.1.74). But this one give me trouble... CODE;BARRA Progressiva per backup file $start = IniRead("Backup.ini", "Dimensione", "dimfile", "") ;read the dimension of original file stored into an .ini file $stop = (DirGetSize($dir_dest)/1024) ;get the dimension of destination (empty) ProgressOn("Back-Up", "Avanzamento in corso...", "0 %", 180, 300, 16) Do sleep(1000) ;refresh 1 second $i = Round(($stop / $start * 100),0) ProgressSet( $i, $i & " % - " & Round($stop, 2) & " Mb") ;Update progressbar with % and Mb $stop = (DirGetSize($dir_dest)/1024) ;chek actual size (HERE IT'S THE TROUBLE) ; MsgBox(0, "dimensione cartella", "Origine: " & $start & @LF & "Destinazione: " & $stop) Until $stop >= $start ProgressSet(100 , "Operazione Terminata", "Finito!") sleep(500) ProgressOff() Exit ... i have 1 file to back-up but it's 2Gb and progress window close after few seconds... i suppose (as MadBoy) because "Windows" reserving the space (i have already read this topic: http://www.autoitscript.com/forum/index.php?showtopic=44485) and my DirGetSize($dir_dest) reach immediately the scheduled size.. Does anybody found how to read the correct filled space of destination during the copy?
-
Copy dir with progress - need some help
Martinibianco replied to MadBoy's topic in AutoIt General Help and Support
Hi MadBoy.. i have the same problem... have you find a solution? My progressbar reach 100% with 1 file of 1Gb in 1 second