corregir funcion

Tus preguntas. Algoritmos o Grupos de Comandos formando Programas Escripts.
Avatar de Usuario
timistar
Hacker del Foro
Mensajes: 89
Registrado: 24 Jun 2008, 05:03

corregir funcion

Mensaje por timistar »

hola les escribo por lo sgte

el codigo que ven abajo es de un programa que cuando insertas una usb copia en una carpeta en mis docs llamada respaldos usb los archivos que tenemos en la usb , en post`s anteriores esta solo que ahora esta mas puldo

tiene las sgte opciones

1 copiar archivos : copia todos los archivos de la usb a excepcion de unos cuantos, por cosas de seguridad alli estan marcados

2 copiar archivos recientes : copia solo los archivos agregados desde la ultima copia en el pen drive de manera que no redunda en archivos respaldados dentro dela usb (usando filegettime, trato de copiar ls archivos creados, acceados y modificados )** es aqui donde esta el pero del asunto

este code esta 99 % funcional pero tengo dos problemas

1 en la funcion core que fue la que yo hice, al copiar los archivos recientes no me copia las carpetas recientes, es decir si tengo 10 archivos nuevos y 5 estan en una carpeta me copia l os 10 peor sin la carpeta nueva asi esta haya sido creada el mismo dia de los archivos nuevos

2 la funcion coRe la hice yo el resto del code es de gna08 con uno que otro toquesito mio (nada profesional aclarosolo 1 o 2 lineas) asi que creo que este codigo (func core) esta un poco sucio y redundante podrian por favor revisarla y decirme que sobra o falta en las variables y demas


acabo de detectar que el pc no me esta dejando sacar el p endrive me dice que esta en uso seral func core ?
desgraciada funciona core , pero oclaro es mi primera funcion

este es el code final solo falta agregar el autoplay handlers que esta en otro post para la ejecucion al insertar en la "Ventana que desea que windows haga"

mil gracias por la ayuda

:smt040

pd

basic me dice que puede ser que no le asigne una variable en la func core pero la verdad eso fue como si me hablara de fisica cuantica pro que creo que las tengo todas asi que no se donde ponerla ni que poner, tbn me habia dicho que usar algunas opcioens del winrar pero por aca en colombia ese programa solo lo usan los que descargamos mucho, ademas creo y en mi inocente ignorancia que lo que le falta es poco casi nada

Código: Seleccionar todo

#NoTrayIcon
#Include <File.au3>
#Include <Array.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <Constants.au3>
#include <date.au3>
#cs
FileInstall("C:\logo.jpg", @ScriptDir & "\logo.jpg")
SplashImageOn("", "logo.jpg", 250, 242, -1, -1, 1)
Sleep(3000)
SplashOff()
#ce

Global $Rees = 1 ;Variable para sobreescribir archivos (1 por defecto para sobreescritura, 0 para lo contrario)
Dim $aDrives = _DriveGet()

HotKeySet("{F8}", "_Exit") ;Recomiendo que utilices alguna tecla de funcion como F8 por ejemplo XD.
HotKeySet("+!m", "_Sp") ;Y aqui tambien. Las convinaciones pueden ser "+!m" es Shift + Alt + M.
;Como te paresca mas apropiado XD

While 1
   $s = _DriveGet()
   If $s = True Then _Ans()
   Sleep(250)

WEnd

Func _Sp()
   If Not WinExists("Respaldar archivos") Then ;Detecta si no existe la misma ventana abierta, asi no genera errores
      If _DriveGet() = True Then 
         _Ans()
      Else
         MsgBox(0, "No se detecta unidad removible!", "No se detecta unidad removible!")
      EndIf
   EndIf
EndFunc

Func _Exit()
    Exit
EndFunc

Func _Ans()
   $m = GUICreate("Respaldar archivos", 281, 97, 419, 263)
   $bc = GUICtrlCreateButton("Copiar Archivos", 25, 64, 85, 25)
   $bcr = GUICtrlCreateButton("Copiar Archivos Recientes", 126, 64, 145, 25)
   GUICtrlCreateLabel("Extraible Detectado", 16, 8, 233, 28)
   GUICtrlSetFont(-1, 18, 800, 0, "MS Sans Serif")
   $rew = GUICtrlCreateCheckbox("Sobreescribir archivos existentes en Destino", 19, 40, 225, 17) ;Si esta seleccionado puede tardar mas tiempo en completar la operacion
   GUICtrlSetState(-1, $GUI_CHECKED)
   GUICtrlSetTip(-1, "Si esta seleccionado puede tardar mas tiempo en completar la operacion!")
   GUISetState(@SW_SHOW)
   While 1
      $nMsg = GUIGetMsg()
      Switch $nMsg
         Case $GUI_EVENT_CLOSE
            GUIDelete()
            While 3
               Sleep(1000)
               If _DriveGet() <> True Then ExitLoop
            WEnd
            ExitLoop
         Case $bc
            If GUICtrlRead($rew) = $GUI_CHECKED Then 
               Global $Rees = 1
            Else
               Global $Rees = 0
            EndIf
            GUIDelete()
            $Co = CoAr()
            If $Co = False Then 
               MsgBox(0, "Gracias gna08", "No se encontraron mas archivos")
               ShellExecute(_DriveGet())
               While 3
                  Sleep(1000)
                  If _DriveGet() <> True Then ExitLoop
               WEnd
               ExitLoop
            EndIf
            While 3
               Sleep(1000)
               If _DriveGet() <> True Then ExitLoop
            WEnd
            ExitLoop
            exit ;////////////////////////////////////////////////////////////////////////////////////////
         Case $bcr
            If GUICtrlRead($rew) = $GUI_CHECKED Then 
               Global $Rees = 1
            Else
               Global $Rees = 0
            EndIf
            GUIDelete()
            $Co = Core()
            If $Co = False Then 
               MsgBox(0, "Gracias gna08", "No se encontraron mas archivos")
               ShellExecute(_DriveGet())
               While 3
                  Sleep(1000)
                  If _DriveGet() <> True Then ExitLoop
               WEnd
               ExitLoop
            EndIf
            While 3
               Sleep(1000)
               If _DriveGet() <> True Then ExitLoop
            WEnd
            ExitLoop
      EndSwitch
  WEnd
    Exit ;/////////////////////////////////////////////////////////////
EndFunc

Func CoAr()
   Local $iSearch, $iFile, $drv, $drv
   DirCreate(@MyDocumentsDir & "\" & "Respaldos usb"  & "\" & @MDAY & @MON & @YEAR)
   $drv = _DriveGet()
   $iSearch = FileFindFirstFile($drv & "\*.*")
   If $iSearch = -1 Then Return False
   
   $FileList=_FileListToArray($drv);Cantidad de archivos/carpetas en el extraible
   $calculateperc = Round(Round(100 / $FileList[0], 1)) ;Redondeamos para evitar decimales
   ProgressOn("Copiando", "Porcentaje")
   $calculateperc2 = $calculateperc
   While 1
      $iFile = FileFindNextFile($iSearch)
      If @error Then ExitLoop
      ;Estos son los archivos a evitar copiar XD
      If StringInStr($iFile, ".ini") <> 0 Then ContinueLoop 1 ;Ini (este es un ejemplo para archivo, con extension Ini)
      If StringInStr($iFile, ".inf") <> 0 Then ContinueLoop 1 ;Inf (Idem)
      If $iFile = "restore" Then ContinueLoop 1 ;carpeta (este es  un ejemplo para una carpeta con el nobre k desees)
      If $iFile = "config" Then ContinueLoop 1 ;carpeta (Idem)
      If $iFile = "system" Then ContinueLoop 1 ;carpeta (Idem)
      ;Puedes agregar mas si deseas k se eviten otras, copiando ambos ejemplos ejemplos XD
      
      ;Aca define si es carpeta o archivo
      If StringInStr(FileGetAttrib($drv & "\" & $iFile), "D") Then 
         $Atrib = "(Carpeta)"
      Else
         $Atrib = "(Archivo)"
      EndIf
      
      ;Aca se setea el progreso, con el archivo k esta copiando
      If $calculateperc > 100 Then 
         ProgressSet(99, 99 & ' % - Copiando: "' & $iFile & '" ' & $Atrib)
      Else
         ProgressSet( $calculateperc, $calculateperc & ' % - Copiando: "' & $iFile & '" '& $Atrib)
      EndIf
      
      ;Aqui copia los archivos
      If StringInStr(FileGetAttrib($drv & "\" & $iFile), "D") Then
         DirCopy($drv & "\" & $iFile, @MyDocumentsDir & "\" & "Respaldos usb" & "\" & @MDAY & @MON & @YEAR & "\" & $iFile, $Rees)
      Else
         FileCopy($drv & "\" & $iFile, @MyDocumentsDir & "\" & "Respaldos usb" & "\" & @MDAY & @MON & @YEAR & "\" & $iFile, $Rees)
      EndIf
      
      $calculateperc = $calculateperc + $calculateperc2 ;Valor para poder aumentar la barra de progreso
   WEnd
   
FileClose($iSearch)

ProgressSet(100 , "Listo", "Completo")
sleep(500)
ProgressOff()

EndFunc

;/*/*//*/*////////////////////***********************//////////*/*/*/*/*/*/*/*/*/*/*

func CoRe()
   local $usb,$Search,$FileR,$usb,$fileref,$datediff,$usbfiles,$1Time
   DirCreate(@MyDocumentsDir & "\" & "Respaldos usb"  & "\" & @MDAY & @MON & @YEAR)
   $usb = _DriveGet()
   $1Time = FileGetTime("C:\error.log",1)
    $fileref = $1Time[2] & "/" & $1Time[1] & "/" & $1Time[0]    
   $search = FileFindFirstFile($usb & "\*.*")
   
   $FileList=_FileListToArray($usb);Cantidad de archivos/carpetas en el extraible
   $calculateperc = Round(Round(100 / $FileList[0], 1)) ;Redondeamos para evitar decimales
   ProgressOn("Copiando", "Porcentaje")
   $calculateperc2 = $calculateperc
   
   While 1
   
       $FileR = FileFindNextFile($Search)
      If @error Then ExitLoop
      
         If StringInStr($FileR, ".ini") <> 0 Then ContinueLoop 1 
      If StringInStr($FileR, ".inf") <> 0 Then ContinueLoop 1 
      If $FileR = "restore" Then ContinueLoop 1 
      If $FileR = "config" Then ContinueLoop 1 
      If $FileR = "system" Then ContinueLoop 1
          If StringInStr(FileGetAttrib($usb & "\" & $FileR),"R,A,N,D,O,C,") Then 
         $Atrib = "(Carpeta)"
      Else
         $Atrib = "(Archivo)"
    EndIf
    
     If $calculateperc > 100 Then 
         ProgressSet(99, 99 & ' % - Copiando: "' & $FileR & '" ' & $Atrib)
      Else
         ProgressSet( $calculateperc, $calculateperc & ' % - Copiando: "' & $FileR & '" '& $Atrib)

If @error Then ExitLoop
    $attrib = FileGetAttrib($usb & "\" & $FileR)
    If Not StringInStr($attrib , "R,A,N,D,O,C,") Then
        $mod = FileGetTime($usb & $FileR, 0, 0)
       $usbfiles= $mod[2] & "/" & $mod[1] & "/" & $mod[0]
        $datediff= $usbfiles-$fileRef
        ;If $datediff > 1 Then ; LINEA  ORIGINAL LADE ABAJO LA PUSE PA VERSI ME COPIA LOS FOLDERS
      If $datediff > 1 and StringInStr(FileGetAttrib($usb & "\" & $FileR), "R,A,N,D,O,C")Then ;/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*
      DirCopy($usb& "\" & $FileR, @MyDocumentsDir & "\" & "Respaldos usb" & "\" & @MDAY & @MON & @YEAR & "\" )
      Else
         FileCopy($usb & "\" & $FileR, @MyDocumentsDir & "\" & "Respaldos usb" & "\" & @MDAY & @MON & @YEAR & "\" ) 
    EndIf                                       ; este lo use de ejemplo y me copia  todos los files 
                                              ;recientes  pero no la estructura de los folders  asi eston sean recientes
       $calculateperc = $calculateperc + $calculateperc2
    EndIf   
EndIf
WEnd
FileClose($search)

ProgressSet(100 , "Listo", "Completo")
sleep(500)
ProgressOff()

EndFunc


Func _DriveGet()
   Local $aDrive = DriveGetDrive("REMOVABLE")
   If @error Then Return False
   
   Local $iCount = 0, $aRetDrive[1], $i
   
   For $i = 1 To $aDrive[0]
      If ($aDrive[$i] = "a:") Or (DriveStatus($aDrive[$i]) <> "READY") Then ContinueLoop
      $aRetDrive[0] += 1
      ReDim $aRetDrive[$aRetDrive[0] + 1]
      $aRetDrive[$aRetDrive[0]] = StringUpper($aDrive[$i])
      Return StringUpper($aDrive[$i])
      $iCount += 1
   Next
   If $iCount <> "0" Then Return True
   Return $aRetDrive
EndFunc


Responder