• Hi Leute!

    Hatte vor einiger Zeit ein kleines Backup Programm Geschrieben, Jetzt habe ich den Code ein wenig überarbeitet und stell ihn euch vor.

    Alt: Alle Dateien wurden Kopiert und erstellt.

    Neu: 1.) Dateien werden nicht mehr „Kopiert“, Naja eigentlich schon sie werden ausgelesen und neu Geschrieben.
    Sollte beim Schreiben eine Datei Existieren wird sie nicht erstellt sowie Leere Verzeichnisse, das kann schon mal Verwirrung stiften bei erneuter Prüfung, hat den Sinn das ich keine Leere Verzeichnisse Benötige. ^^

    Neu: 2.) Backup Prüfung „bei gleichen Namen vom Verzeichnis‘‘ .
    Die Überprüfung findet auf eine Auslese Basis mit Hash wert Erstellung + Vergleich stad.

    Die Prüfung Findet in drei Stufen stad 1. Existiert die Datei wenn ja weiter mit Punkt 2. Größer – Kleiner der zu Prüfende Datei wenn Gleich wird die Datei Binär Ausgelesen gewandelt in ein Hash Code und wird dann auf gleich ungleich geprüft.
    Ist nur ein Zeichen anders o. ein Leerzeichen wurde hinzugefügt ist die Datei nicht mehr gleich dem Gegenstück und kann neu Erstellt werden.

    Die Geschwindigkeit ist für mich Akzeptabel.

    Spoiler anzeigen
    [autoit]

    #NoTrayIcon
    #RequireAdmin
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_icon=G:\Bilder\SAMMLUNG\Icon_S\Refresh.ico
    #AutoIt3Wrapper_UseX64=n
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    ;#include <_ArrayMultiDisplay.au3>
    #include <GuiListView.au3>
    #include <ComboConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    Opt('GUIOnEventMode', 1)

    [/autoit] [autoit][/autoit] [autoit]

    Global $Form[2]
    Local $F
    Local $UB
    Local $FN
    Local $RAS
    Local $Verz
    Local $Expan
    Local $aDaten, $Stopp = 0
    Local $ListView[2], $hListView[2]
    Local $Progress[2], $Label[10], $Button[6], $Input[2], $Einstellung, $Kontroll
    $Form[0] = GUICreate('BackUp - Erstellen/Prüfen ', 400, 300, -1, -1)
    GUISetOnEvent(-3, 'GUI_Exit')
    GUICtrlCreateGroup('', 10, 85, 375, 50)
    $Label[0] = GUICtrlCreateLabel('Quelle', 12, 10, 52, 20)
    GUICtrlSetFont(-1, 8, 0, '', 'Calibri')
    $Input[0] = GUICtrlCreateInput('', 10, 25, 200, 20)
    GUICtrlSetFont(-1, 8, 0, '', 'Calibri')
    $Button[0] = GUICtrlCreateButton('...', 213, 24.5, 30, 20)
    GUICtrlSetOnEvent(-1, 'Menue')
    $Label[1] = GUICtrlCreateLabel('BackUp Prüfen / Ziel', 12, 50, 80, 20)
    GUICtrlSetFont(-1, 8, 0, '', 'Calibri')
    $Input[1] = GUICtrlCreateInput('', 10, 65, 200, 20)
    GUICtrlSetFont(-1, 8, 0, '', 'Calibri')
    $Button[1] = GUICtrlCreateButton('...', 213, 64.5, 30, 20)
    GUICtrlSetOnEvent(-1, 'Menue')
    $Button[2] = GUICtrlCreateButton('Start...', 260, 24.5, 60, 20)
    GUICtrlSetOnEvent(-1, 'Menue')
    $Button[3] = GUICtrlCreateButton('Stopp...', 325, 24.5, 60, 20)
    $Einstellung = GUICtrlCreateCombo('Backup Erstellen', 260, 64.5, 125, 20, $CBS_DROPDOWNLIST)
    GUICtrlSetData($Einstellung, 'Backup Prüfen')
    $ListView[0] = GUICtrlCreateListView('', 0, 140, 400, 150, BitOR((0x0004 + 0x8000), 0x00010000))
    $hListView[0] = GUICtrlGetHandle($ListView[0])
    GUICtrlSetFont(-1, 7.5, 0, '', 'Calibri')
    _GUICtrlListView_InsertColumn($hListView[0], 0, 'Daten', 55)
    _GUICtrlListView_InsertColumn($hListView[0], 1, 'Erstellt', 50)
    _GUICtrlListView_InsertColumn($hListView[0], 2, 'Verändert', 50)
    _GUICtrlListView_InsertColumn($hListView[0], 3, 'Letzter zu Griff', 50)
    _GUICtrlListView_InsertColumn($hListView[0], 4, 'Größe', 50)
    _GUICtrlListView_InsertColumn($hListView[0], 5, 'Attribute', 40)
    _GUICtrlListView_InsertColumn($hListView[0], 6, 'Version', 50)
    _GUICtrlListView_InsertColumn($hListView[0], 7, 'Status', 50)
    $Progress[0] = GUICtrlCreateProgress(0, 290, 400, 10)
    $Progress[1] = GUICtrlCreateProgress(20, 105, 50, 15)
    $Label[2] = GUICtrlCreateLabel('', 80, 102, 300, 25)
    GUICtrlSetFont(-1, 14, 800, '', 'Calibri')
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $Form[1] = GUICreate('Bericht...', 200, 250, -1, -1)
    GUISetOnEvent(-3, 'Form_HIDE')
    GUICtrlCreateGroup('', 10, 30, 180, 80)
    $Label[3] = GUICtrlCreateLabel('Details der Prüfung...', 40, 10, 120, 20)
    GUICtrlSetFont(-1, 10, 800, '', 'Calibri')
    $Label[4] = GUICtrlCreateLabel('', 25, 50, 120, 20)
    GUICtrlSetFont(-1, 8.5, 700, '', 'Calibri')
    $Label[5] = GUICtrlCreateLabel('', 25, 80, 160, 20)
    GUICtrlSetFont(-1, 8.5, 700, '', 'Calibri')
    $Button[4] = GUICtrlCreateButton('Erstellen', 21, 118, 80, 19)
    GUICtrlSetOnEvent(-1, 'Menue')
    $Button[5] = GUICtrlCreateButton('OK', 100, 118, 80, 19)
    GUICtrlSetOnEvent(-1, 'Form_HIDE')
    $ListView[1] = GUICtrlCreateListView('', 12, 140, 175, 100, BitOR((0x0004 + 0x8000), 0x00010000))
    $hListView[1] = GUICtrlGetHandle($ListView[1])
    GUICtrlSetFont(-1, 7.5, 0, '', 'Calibri')
    _GUICtrlListView_InsertColumn($hListView[1], 0, 'Daten', 55)
    _GUICtrlListView_InsertColumn($hListView[1], 1, 'Erstellt', 50)
    _GUICtrlListView_InsertColumn($hListView[1], 2, 'Verändert', 50)
    _GUICtrlListView_InsertColumn($hListView[1], 3, 'Letzter zu Griff', 50)
    _GUICtrlListView_InsertColumn($hListView[1], 4, 'Größe', 50)
    _GUICtrlListView_InsertColumn($hListView[1], 5, 'Attribute', 40)
    _GUICtrlListView_InsertColumn($hListView[1], 6, 'Version', 50)
    _GUICtrlListView_InsertColumn($hListView[1], 7, 'Status', 50)
    GUISetState(@SW_HIDE)

    [/autoit] [autoit][/autoit] [autoit]

    GUIRegisterMsg($WM_COMMAND, 'MY_WM_COMMAND')

    [/autoit] [autoit][/autoit] [autoit]

    Func Menue()
    Switch @GUI_CtrlId
    Case $Button[0]
    ControlSetText($Form[0], '', $Input[0], FileSelectFolder('Bitte Quellverzeichnis auswählen', @DesktopDir, 2, '', $Form[0]))
    Case $Button[1]
    ControlSetText($Form[0], '', $Input[1], FileSelectFolder('Bitte Quellverzeichnis auswählen', @DesktopDir, 2, '', $Form[0]))
    Case $Button[2]
    _GUICtrlListView_DeleteAllItems($hListView[0])
    If GUICtrlRead($Input[0]) And GUICtrlRead($Input[1]) Then Daten(GUICtrlRead($Input[0]), GUICtrlRead($Input[1]), GUICtrlRead($Einstellung))
    Case $Button[4]
    Local $UeberW = GetListViewToArray(1)
    Local $sQuelle, $F_opUe, $F_opUe2, $SizeUe, $FileUe, $ByteUe, $O_DriveUe, $O_Drive_vUe, $DriveUe, $iVerzeichnisUe, $iPahtAnpassungUe
    If IsArray($UeberW) And GUICtrlRead($Input[0]) And GUICtrlRead($Input[1]) Then
    ProgressOn('Datein Schreiben...', 'Datein werden Neu Geschreiben!', '')
    If O_Drive(GUICtrlRead($Input[0])) <> O_Drive(GUICtrlRead($Input[1])) Then $iPahtAnpassungUe = 1
    $DriveUe = GetDrive(GUICtrlRead($Input[1]))
    $O_Drive_vUe = O_Drive(GUICtrlRead($Input[1]))
    $O_DriveUe = O_Drive(GUICtrlRead($Input[0]))
    For $i = 1 To $UeberW[0][0]
    $sQuelle = GetFileInfo($UeberW[$i][0])
    If $iPahtAnpassungUe Then
    If (StringLen(GUICtrlRead($Input[0])) > StringLen(GUICtrlRead($Input[1]))) Then
    $iVerzeichnisUe = StringMid($sQuelle[0], StringInStr(GUICtrlRead($Input[0]), '\', 0, -1) + 1, StringLen($sQuelle[0]))
    Else
    $iVerzeichnisUe = StringLeft($O_Drive_vUe, StringInStr($O_Drive_vUe, $O_DriveUe) - 1) & O_Drive($sQuelle[0])
    EndIf
    Else
    $iVerzeichnisUe = O_Drive($sQuelle[0])
    EndIf
    $SizeUe = StringReplace(StringReplace(StringLeft($sQuelle[10], StringLen($sQuelle[10]) - 8), ' ', ''), '-1', '0')
    $FileUe = GetFileName($sQuelle[0], 1)
    If FileExists($DriveUe & $iVerzeichnisUe) Then FileDelete($DriveUe & $iVerzeichnisUe)
    $F_opUe = FileOpen($sQuelle[0], 16)
    If $F_opUe = -1 And ProgressSet(Round($i * 100 / $UeberW[0][0]), Round($i * 100 / $UeberW[0][0]) & ' % Fehler ( beim Öffnen )') Then ContinueLoop
    $F_opUe2 = FileOpen($DriveUe & $iVerzeichnisUe, 26)
    If $F_opUe2 = -1 And ProgressSet(Round($i * 100 / $UeberW[0][0]), Round($i * 100 / $UeberW[0][0]) & ' % Fehler ( beim Öffnen )') Then ContinueLoop
    If (Round(($SizeUe / 1048576)) > 25) Then
    $SizeUe = Int($SizeUe / 99)
    Do
    $ByteUe = FileRead($F_opUe, $SizeUe)
    If @error Then ExitLoop
    FileWrite($F_opUe2, $ByteUe)
    Until False
    Else
    FileWrite($F_opUe2, FileRead($F_opUe))
    EndIf
    FileClose($F_opUe)
    FileClose($F_opUe2)
    ProgressSet(Round($i * 100 / $UeberW[0][0]), Round($i * 100 / $UeberW[0][0]) & ' % ' & $i & ' von ' & $UeberW[0][0] & ' ' & $FileUe)
    Next
    EndIf
    Sleep(3000)
    ProgressOff()
    EndSwitch
    EndFunc ;==>Menue

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func Daten(Const $Quelle, Const $BackUp, Const $iV_W)
    If Not StringCompare($Quelle, $BackUp) Then Return MsgBox(0x40000 + 0x20 + 0x1000, 'Bericht', ' Quelle u. Ziel sind Gleich ' & @CRLF & ' Vorgang wurde Abgebrochen!', 10)
    If Not FileExists($Quelle) Then Return MsgBox(0x40000 + 0x20 + 0x1000, 'Bericht', ' Quelle Existiert nicht ' & @CRLF & ' Vorgang wurde Abgebrochen!', 10)
    Local $aGetDat, $iVerzeichnis, $iPahtAnpassung = 0, $O_Drive, $O_Drive_v, $Byte, $Byte_v
    Local $Size, $Size_v, $M5, $sM5, $M5_v, $sM5_v, $F_op, $F_op2, $F_G, $F_Gv, $Counter, $File
    If O_Drive($Quelle) <> O_Drive($BackUp) Then $iPahtAnpassung = 1
    ToolTip(' Lese Vorgang... ', Default, Default, ' Daten werden Eingelesen Bitte warten... ', 1, 2)
    $aDaten = _FileListToRekursiv($Quelle)
    ToolTip('')
    Local $iDrive = GetDrive($BackUp)
    $O_Drive_v = O_Drive($BackUp)
    $O_Drive = O_Drive($Quelle)
    $Stopp = 0
    If Not IsArray($aDaten) Then Return
    If ($iV_W = 'Backup Prüfen') Then
    For $i = 1 To $aDaten[0]
    If $Stopp Then Return
    If $iPahtAnpassung Then
    If (StringLen($Quelle) > StringLen($BackUp)) Then
    $iVerzeichnis = StringMid($aDaten[$i], StringInStr($Quelle, '\', 0, -1) + 1, StringLen($aDaten[$i]))
    Else
    $iVerzeichnis = StringLeft($O_Drive_v, StringInStr($O_Drive_v, $O_Drive) - 1) & O_Drive($aDaten[$i])
    EndIf
    Else
    $iVerzeichnis = O_Drive($aDaten[$i])
    EndIf
    WinSetTitle($Form[0], '', $i & ' von ' & $aDaten[0])
    GUICtrlSetData($Progress[0], ($i * 100) / $aDaten[0])
    $aGetDat = GetFileInfo($aDaten[$i])
    GUICtrlSetData($Progress[1], 0)
    If Not StringInStr($iVerzeichnis, $O_Drive_v) Then Return MsgBox(0x40000 + 0x10 + 0x1000, 'Bericht', ' Das Verzeichniss Existirt nicht ' & @CRLF & ' Prüfung wurde Abgebrochen!', 10)
    If Not FileExists($iDrive & $iVerzeichnis) Then
    If Set_ListView(0, $aGetDat) Then ContinueLoop
    Else
    $aGetDat_v = GetFileInfo($iDrive & $iVerzeichnis)
    Switch GetDFF($aDaten[$i])
    Case 'Files'
    $F_G = StringReplace(StringLeft($aGetDat[10], StringLen($aGetDat[10]) - 8), ' ', '')
    $F_Gv = StringReplace(StringLeft($aGetDat_v[10], StringLen($aGetDat_v[10]) - 8), ' ', '')
    If ($F_G <> $F_Gv) Then
    If Set_ListView(0, $aGetDat) Then ContinueLoop
    Else
    If ($F_G = -1 And $F_Gv = -1) Then ContinueLoop
    $File = GetFileName($aGetDat[0], 1)
    If (StringLen($File) > 24) Then $File = StringLeft($File, StringLen($File) - 3) & '...'
    GUICtrlSetData($Label[2], $File)
    $F_op = FileOpen($aGetDat[0], 16)
    If $F_op = -1 Then ContinueLoop
    $F_op2 = FileOpen($aGetDat_v[0], 16)
    If $F_op2 = -1 Then ContinueLoop
    If (Round(($F_G / 1048576)) > 25) Then
    $Size = Int($F_G / 99)
    $Size_v = Int($F_Gv / 99)
    $Counter = 0
    Do
    $Byte = FileRead($F_op, $Size)
    $Byte_v = FileRead($F_op2, $Size_v)
    If @error Then ExitLoop
    $Counter += 1
    $M5 = Crypt($Byte)
    $M5_v = Crypt($Byte_v)
    $sM5 &= StringRight($M5, StringLen($M5) - 2)
    $sM5_v &= StringRight($M5_v, StringLen($M5_v) - 2)
    GUICtrlSetData($Progress[1], $Counter)
    Until False
    If (Crypt($sM5) <> Crypt($sM5_v)) Then Set_ListView(0, $aGetDat_v)
    Else
    If (Crypt(FileRead($F_op)) <> Crypt(FileRead($F_op2))) Then Set_ListView(0, $aGetDat_v)
    GUICtrlSetData($Progress[1], 100)
    EndIf
    FileClose($F_op)
    FileClose($F_op2)
    EndIf
    EndSwitch
    EndIf
    Next
    WinSetTitle($Form[0], '', 'BackUp - Erstellen/Prüfen ')
    $Kontroll = GetListViewToArray(0)
    If Not IsArray($Kontroll) Then Return MsgBox(0x40000 + 0x40 + 0x1000, 'Bericht', ' Die Prüfung ist abgeschlossen ' & @CRLF & 'Beide Daten Blöcke sind Identisch!', 10)
    _GUICtrlListView_DeleteAllItems($hListView[1])
    Local $GMG = 0
    For $i = 1 To $Kontroll[0][0]
    $GMG += StringReplace(StringLeft($Kontroll[$i][1], StringLen($Kontroll[$i][1]) - 8), ' ', '')
    Set_ListView(1, GetFileInfo($Kontroll[$i][0]))
    Progress_ListView(1, GetDFF($Kontroll[$i][0]))
    Next
    GUICtrlSetData($Label[4], 'Anzahl der Datein: ' & $Kontroll[0][0])
    GUICtrlSetData($Label[5], 'Größe der Datein: ' & Round(($GMG / 1048576)) & ' MByte(s)')
    GUISetState(@SW_SHOW)
    Else
    For $i = 1 To $aDaten[0]
    If $Stopp Then Return
    Set_ListView(0, GetFileInfo($aDaten[$i]))
    If $iPahtAnpassung Then
    If (StringLen($Quelle) > StringLen($BackUp)) Then
    If Not StringInStr($O_Drive, $O_Drive_v) Then
    $iVerzeichnis = $O_Drive_v & '\' & O_Drive($aDaten[$i])
    Else
    $iVerzeichnis = StringMid($aDaten[$i], StringInStr($Quelle, '\', 0, -1) + 1, StringLen($aDaten[$i]))
    EndIf
    Else
    $iVerzeichnis = $O_Drive_v & '\' & O_Drive($aDaten[$i])
    EndIf
    EndIf
    WinSetTitle($Form[0], '', $i & ' von ' & $aDaten[0])
    GUICtrlSetData($Progress[0], ($i * 100) / $aDaten[0])
    $aGetDat = GetFileInfo($aDaten[$i])
    GUICtrlSetData($Progress[1], 0)
    If FileExists($iDrive & $iVerzeichnis) And Progress_ListView(0, 'Existiert') Then ContinueLoop
    Switch GetDFF($aDaten[$i])
    Case 'Folder'
    If Progress_ListView(0, 'Folder') Then ContinueLoop
    Case 'Files'
    $Size_v = StringReplace(StringReplace(StringLeft($aGetDat[10], StringLen($aGetDat[10]) - 8), ' ', ''), '-1', '0')
    $File = GetFileName($aGetDat[0], 1)
    If (StringLen($File) > 24) Then $File = StringLeft($File, StringLen($File) - 3) & '...'
    GUICtrlSetData($Label[2], $File)
    $F_op = FileOpen($aGetDat[0], 16)
    If $F_op = -1 And Progress_ListView(0, 'Fehler ( beim Öffnen )') Then ContinueLoop
    $F_op2 = FileOpen($iDrive & $iVerzeichnis, 26)
    If $F_op2 = -1 And Progress_ListView(0, 'Fehler ( beim Öffnen )') Then ContinueLoop
    $Counter = 0
    If (Round(($Size_v / 1048576)) > 25) Then
    $Size = Int($Size_v / 99)
    Do
    $Byte = FileRead($F_op, $Size)
    If @error Then ExitLoop
    $Counter += $Size
    FileWrite($F_op2, $Byte)
    GUICtrlSetData($Progress[1], Round($Counter * 100 / $Size_v))
    Progress_ListView(0, Round($Counter * 100 / $Size_v, -1) & ' %')
    Until False
    Else
    FileWrite($F_op2, FileRead($F_op))
    GUICtrlSetData($Progress[1], 100)
    Progress_ListView(0, '100 %')
    EndIf
    FileClose($F_op)
    FileClose($F_op2)
    EndSwitch
    Next
    If FileExists($iDrive & $O_Drive) Then ShellExecute($iDrive & $O_Drive)
    EndIf
    WinSetTitle($Form[0], '', 'BackUp - Erstellen/Prüfen ')
    EndFunc ;==>Daten

    [/autoit] [autoit][/autoit] [autoit]

    Func Set_ListView($iIndex, $aDat)
    Local $sIndex = _GUICtrlListView_GetItemCount($hListView[$iIndex])
    _GUICtrlListView_AddItem($hListView[$iIndex], $aDat[0], $sIndex)
    _GUICtrlListView_AddSubItem($hListView[$iIndex], $sIndex, $aDat[7], 1)
    _GUICtrlListView_AddSubItem($hListView[$iIndex], $sIndex, $aDat[8], 2)
    _GUICtrlListView_AddSubItem($hListView[$iIndex], $sIndex, $aDat[9], 3)
    _GUICtrlListView_AddSubItem($hListView[$iIndex], $sIndex, StringReplace($aDat[10], '-1', '0'), 4)
    _GUICtrlListView_AddSubItem($hListView[$iIndex], $sIndex, $aDat[11], 5)
    _GUICtrlListView_AddSubItem($hListView[$iIndex], $sIndex, $aDat[12], 6)
    Return _GUICtrlListView_EnsureVisible($hListView[$iIndex], $sIndex)
    EndFunc ;==>Set_ListView

    [/autoit] [autoit][/autoit] [autoit]

    Func Progress_ListView($iIndex, $aDat)
    Local $sIndex = _GUICtrlListView_GetItemCount($hListView[$iIndex])
    Return _GUICtrlListView_SetItemText($hListView[$iIndex], $sIndex - 1, $aDat, 7)
    EndFunc ;==>Progress_ListView

    [/autoit] [autoit][/autoit] [autoit]

    Func GetListViewToArray($iIndex)
    Local $UB = _GUICtrlListView_GetItemCount($hListView[$iIndex])
    If Not $UB Then Return False
    Local $GCount[$UB + 1][2]
    $GCount[0][0] = $UB
    For $i = 1 To $GCount[0][0]
    $GCount[$i][0] = _GUICtrlListView_GetItemText($hListView[$iIndex], ($i - 1))
    $GCount[$i][1] = _GUICtrlListView_GetItemText($hListView[$iIndex], ($i - 1), 4)
    Next
    Return $GCount
    EndFunc ;==>GetListViewToArray

    [/autoit] [autoit][/autoit] [autoit]

    ;===================================================================================================================================#
    ;~ Function Name....: _FileListToRekursiv($Pfad, $Wildc = '*', $Flag = 0)
    ;
    ;~ Description......: Auflistung von Dateien
    ;
    ;~ $_Pfad_..........: Pfad
    ;~ $Wildc_..........: '*' ( Standart ) Suchbegrif u. o. Wildcards bei Wildcards mit o. suchbegriff $_Flag_ auf '3' setzen es ist auch
    ; möglich mehrere suchbegriffe zu suchen z.B ( *wma,*mp3,*txt ) o. ( wma,mp3,txt ) getrennt mit ','
    ;~ $Flag............: '0' ( Standart ) Datein u. Ordner '1' nur Datein '2' nur Ordner '3' um mit suchbegriffen zu suchen wie (*.txt)
    ;
    ;~ Return Value(s)..: Array ( Standard ) mit den gefundenen Dateien u. o Ordner Array[0] endhält die anzahl ( Fund )
    ;
    ;~ Author(s)........: Kleiner (http://www.autoit.de) # 27.03.2010 09:00 #
    ;====================================================================================================================================#
    Func _FileListToRekursiv($Pfad, Const $Wildc = '*', Const $Flag = 0)
    $Pfad = StringRegExpReplace($Pfad, '[\\/]+\z', '\') & '\'
    If Not FileExists($Pfad) Then Return SetError(1, 1, '')
    If StringRegExp($Wildc, '[\\/:><\|]|(?s)\A\s*\z') Then Return SetError(2, 2, '')
    If Not ($Flag = 0 Or $Flag = 1 Or $Flag = 2 Or $Flag = 3) Then Return SetError(3, 3, '')
    If ($RAS <> '') Then $RAS = ''
    Rekursiv($Pfad, StringReplace(StringReplace($Wildc, '*', ''), ',', '|'), $Flag)
    If Not $RAS Then Return SetError(4, 4, '')
    Return StringSplit(StringTrimLeft($RAS, 1), '|')
    EndFunc ;==>_FileListToRekursiv

    [/autoit] [autoit][/autoit] [autoit]

    Func Rekursiv($Pfad, $Wildc, $Flag)
    Local $FL
    $F = FileFindFirstFile($Pfad & '*')
    If ($F <> -1) Then
    While True
    $FN = FileFindNextFile($F)
    If @error Then ExitLoop
    $Expan = @extended
    Switch $Flag
    Case 0
    Switch $Expan
    Case 0
    $RAS &= '|' & $Pfad & $FN
    Case 1
    $FL &= '|' & $FN & '\'
    $RAS &= '|' & $Pfad & $FN
    EndSwitch
    Case 1
    Switch $Expan
    Case 0
    $RAS &= '|' & $Pfad & $FN
    Case 1
    $FL &= '|' & $FN & '\'
    EndSwitch
    Case 2
    If $Expan Then
    $FL &= '|' & $FN & '\'
    $RAS &= '|' & $Pfad & $FN
    EndIf
    Case 3
    If $Expan Then $FL &= '|' & $FN & '\'
    If Not $Expan Then
    If StringRegExp($FN, $Wildc) Then $RAS &= '|' & $Pfad & $FN
    EndIf
    EndSwitch
    WEnd
    EndIf
    FileClose($F)
    If Not $FL Then Return $FL = '|'
    $Verz = StringSplit(StringTrimLeft($FL, 1), '|')
    $UB = UBound($Verz) - 1
    For $i = 0 To $UB - 1
    $Verz[$i] = $Verz[$i + 1]
    Next
    ReDim $Verz[$UB]
    For $For In $Verz
    If Not GetFileAttributes($Pfad & $For) Then Rekursiv($Pfad & $For, $Wildc, $Flag)
    Next
    EndFunc ;==>Rekursiv

    [/autoit] [autoit][/autoit] [autoit]

    Func GetFileAttributes($FLS);[user='200143']progandy[/user]
    Dim Static $K32 = DllOpen('kernel32.dll')
    Dim $DA = DllCall($K32, 'dword', 'GetFileAttributesW', 'wstr', $FLS)
    If (@error) Then Return SetError(1, @error, False)
    Return BitAND($DA[0], 1024) = 1024
    EndFunc ;==>GetFileAttributes

    [/autoit] [autoit][/autoit] [autoit]

    Func GetFileInfo($sPath, $iSize = 0, $Extension = 0)
    If Not FileExists($sPath) Then Return SetError(1, 0, -1)
    Local $FileInfo = '|' & $sPath; Original
    $FileInfo &= '|' & FileGetLongName($sPath); LongName
    $FileInfo &= '|' & FileGetShortName($sPath); ShortName
    $FileInfo &= '|' & GetDrive($sPath); Drive
    $FileInfo &= '|' & GetVerzeichnis($sPath); Verzeichnis
    $FileInfo &= '|' & GetFileName($sPath, $Extension); Dateiname
    $FileInfo &= '|' & GetExtensionName($sPath); Datei erweiterung
    $FileInfo &= '|' & StringRegExpReplace(FileGetTime($sPath, 1, 1), '(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})', '$3.$2.$1 $4:$5:$6'); Erstellt
    $FileInfo &= '|' & StringRegExpReplace(FileGetTime($sPath, 0, 1), '(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})', '$3.$2.$1 $4:$5:$6'); Verändert
    $FileInfo &= '|' & StringRegExpReplace(FileGetTime($sPath, 2, 1), '(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})', '$3.$2.$1 $4:$5:$6'); Letzter Zugrif
    $FileInfo &= '|' & FileGetSize_BKGMT($sPath, $iSize) ; Größe
    $FileInfo &= '|' & FileGetAttrib($sPath); Attribute
    $FileInfo &= '|' & FileGetVersion($sPath); Version
    Return StringSplit(StringTrimLeft($FileInfo, 1), '|', 2)
    EndFunc ;==>GetFileInfo

    [/autoit] [autoit][/autoit] [autoit]

    Func FileGetSize_BKGMT($sPath, $iSize = 0)
    If Not FileExists($sPath) Then Return SetError(1, 0, -1)
    If ($iSize < 0) Or ($iSize > 4) Then $iSize = 0
    Local $Error
    Local $aSize[5] = [' Byte(s)', ' KByte(s)', ' MByte(s)', ' GByte(s)', ' TByte(s)']
    $eSize = Round(FileGetSize($sPath) / 1024 ^ $iSize, 2)
    If Not $eSize Then $eSize = Round(DirGetSize($sPath) / 1024 ^ $iSize, 2)
    Return $eSize & $aSize[$iSize]
    EndFunc ;==>FileGetSize_BKGMT

    [/autoit] [autoit][/autoit] [autoit]

    Func GetFileName($sPath, $Extension = 0)
    If Not $Extension Then
    Dim $GFN = StringMid($sPath, StringInStr($sPath, '\', 0, -1) + 1, StringLen($sPath))
    Return StringLeft($GFN, StringInStr($GFN, '.') - 1)
    Else
    Return StringMid($sPath, StringInStr($sPath, '\', 0, -1) + 1, StringLen($sPath))
    EndIf
    EndFunc ;==>GetFileName

    [/autoit] [autoit][/autoit] [autoit]

    Func GetDFF($Drive_Folder_Files); Is Folder or Files or Drive
    Local $objExist = ObjCreate('Scripting.FileSystemObject')
    If @error Then Return SetError(1, 1, -1)
    If $objExist.DriveExists($Drive_Folder_Files) Then Return 'Drive'
    If $objExist.FolderExists($Drive_Folder_Files) Then Return 'Folder'
    If $objExist.FileExists($Drive_Folder_Files) Then Return 'Files'
    Return 0
    EndFunc ;==>GetDFF

    [/autoit] [autoit][/autoit] [autoit]

    Func GetDrive($sPath)
    Return StringLeft($sPath, StringInStr($sPath, '\'))
    EndFunc ;==>GetDrive

    [/autoit] [autoit][/autoit] [autoit]

    Func GetVerzeichnis($sPath)
    Return StringMid($sPath, StringInStr($sPath, '\'), StringInStr($sPath, '\', 0, -1) - 2)
    EndFunc ;==>GetVerzeichnis

    [/autoit] [autoit][/autoit] [autoit]

    Func GetExtensionName($sPath)
    Return StringMid($sPath, StringInStr($sPath, '.', 0, -1), StringLen($sPath))
    EndFunc ;==>GetExtensionName

    [/autoit] [autoit][/autoit] [autoit]

    Func O_Drive($sPath)
    Return StringRight($sPath, StringLen($sPath) - StringLen(StringLeft($sPath, StringInStr($sPath, '\'))))
    EndFunc ;==>O_Drive

    [/autoit] [autoit][/autoit] [autoit]

    Func Crypt($sData)
    Dim Static $DLL32 = DllOpen('advapi32.dll')
    Local $Ret, $hProv, $hHash, $tData
    $hProv = DllCall($DLL32, 'int', 'CryptAcquireContextW', 'ptr*', 0, 'ptr', 0, 'ptr', 0, 'dword', 3, 'dword', 0xF0000000)
    If (@error) Or (Not $hProv[0]) Then Return ''
    $hHash = DllCall($DLL32, 'int', 'CryptCreateHash', 'ptr', $hProv[1], 'uint', 0x00008003, 'ptr', 0, 'dword', 0, 'ptr*', 0)
    If (@error) Or (Not $hHash[0]) Then Return ''
    $hHash = $hHash[5]
    $tData = DllStructCreate('byte[' & BinaryLen($sData) & ']')
    DllStructSetData($tData, 1, $sData)
    $Ret = DllCall($DLL32, 'int', 'CryptHashData', 'ptr', $hHash, 'ptr', DllStructGetPtr($tData), 'dword', DllStructGetSize($tData), 'dword', 1)
    If (@error) Or (Not $Ret[0]) Then Return ''
    $tData = DllStructCreate('byte[16]')
    $Ret = DllCall($DLL32, 'int', 'CryptGetHashParam', 'ptr', $hHash, 'dword', 2, 'ptr', DllStructGetPtr($tData), 'dword*', 16, 'dword', 0)
    If (@error) Or (Not $Ret[0]) Then Return ''
    If $hHash Then DllCall($DLL32, 'int', 'CryptDestroyHash', 'ptr', $hHash)
    Return DllStructGetData($tData, 1)
    EndFunc ;==>Crypt

    [/autoit] [autoit][/autoit] [autoit]

    Func MY_WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
    ;ConsoleWrite(BitShift($wParam, 16) & ' ' & BitAND($wParam, 0xFFFF) & ' ' & GUICtrlRead(BitAND($wParam, 0xFFFF), 1) & @CR)
    $wParam = BitAND($wParam, 0xFFFF)
    If (IsArray($aDaten) And $wParam = $Button[3]) Then $Stopp = 1
    Return $GUI_RUNDEFMSG
    EndFunc ;==>MY_WM_COMMAND

    [/autoit] [autoit][/autoit] [autoit]

    Func Form_HIDE()
    GUISetState(@SW_HIDE, @GUI_WinHandle)
    EndFunc ;==>Form_HIDE

    [/autoit] [autoit][/autoit] [autoit]

    Func GUI_Exit()
    Exit
    EndFunc ;==>GUI_Exit

    [/autoit] [autoit][/autoit] [autoit]

    While True * Sleep(10)
    WEnd

    [/autoit]

    Lg Kleiner

  • Hi AutoBert!


    Werde ich mit rein nehmen!
    Ist dann auch einfacher als den Pfad selber zu schreiben o. kopieren! ;)
    Habe gerade noch ein Dubletten finder gepostet den werde ich auch mit rein nehmen!


    LG Kleiner

  • Hallo,
    erstellt dein Backup Script zuerst die "Liste der zu kopierenden Dateien" oder fängt es gleich an zu kopieren und erstellt die liste während des kopierens?

    wo bekomme ich die _ArrayMultiDisplay.au3 her?


    //edit:

    Ich habe auch vor ein Backup Script zu schreiben...es sollte folgendes können:
    - Kann mit Parametern gestartet werden (extra Parameter um ohne/mit GUIzu starten)

    - Rechte mitkopieren (ON/OFF)
    - Vergleichen nach Größe/Datum oder beides...eventuell sogar checksumme ?
    - Versionierung (ON/OFF/einstellbare Anzahl von Versionen)

    -Es soll eine Liste von den zu koperenden Dateien erstellen und diese von oben abarbeiten (User kann somit durch sortieren/verschieben festlegen/beeinflussen, welche Dateien/Verzeichnisse zuerst kopiert werden...z.B. nach Größe/Name/Datum)
    -Das erstellen der Kopierliste soll wärend des Kopierens geschehen, neu zu kopierende Elemente je nach Sortierung der Liste entsprechend einfügen ----> da sehe ich das größe Problem...kopieren und gleichzeitig nach neuen Dateien suchen

    -Einstellung, was passieren soll, wenn Datei schon existiert (Überschreiben[einmal/immer] nichts unternehmen), nur wenn Datei unterschiedlich ist...
    -Wenn es zu fehlern kommt (z.B. dann einfach mit der nächsten datei weitermachen)

    -Fortschrittsanzeige für jede Datei und Gesamtfortschritt
    -Geschwindigkeitsanzeige?

    -Eigene Dateierweiterung (z.B. Datei.copy). In dieser (INI)Datei sind dann die Einstellungen für dieses Profile.....nach dem doppelklick würde das kopieren starten, so als wenn der user es per Hand eingetragen hätte...
    -Wenn möglich Kopier Handle ersetzen (Sodass beim kopieren das Script gleich benutzt wird)

    Ich habe mich dabei an Supercopier (http://supercopier.sfxteam.org/) orientiert, gefällt mir gut, aber wenn ich/wir das machen, kann man das ein oder andere noch verbessern :)


    Ich würde mich freuen, wenn wir das zusammen machen können....Wenn nicht, dann werde ich alleine schonmal starten...glaube da könnte was schönen dabei rauskommen :)

    Danke schonmal!


    Gruß
    GerhardSchr

    12 Mal editiert, zuletzt von GerhardSchr (19. Juli 2012 um 16:47)