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
#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)
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()
$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)
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
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
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
Func Progress_ListView($iIndex, $aDat)
Local $sIndex = _GUICtrlListView_GetItemCount($hListView[$iIndex])
Return _GUICtrlListView_SetItemText($hListView[$iIndex], $sIndex - 1, $aDat, 7)
EndFunc ;==>Progress_ListView
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
;===================================================================================================================================#
;~ 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
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
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
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
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
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
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
Func GetDrive($sPath)
Return StringLeft($sPath, StringInStr($sPath, '\'))
EndFunc ;==>GetDrive
Func GetVerzeichnis($sPath)
Return StringMid($sPath, StringInStr($sPath, '\'), StringInStr($sPath, '\', 0, -1) - 2)
EndFunc ;==>GetVerzeichnis
Func GetExtensionName($sPath)
Return StringMid($sPath, StringInStr($sPath, '.', 0, -1), StringLen($sPath))
EndFunc ;==>GetExtensionName
Func O_Drive($sPath)
Return StringRight($sPath, StringLen($sPath) - StringLen(StringLeft($sPath, StringInStr($sPath, '\'))))
EndFunc ;==>O_Drive
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
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
Func Form_HIDE()
GUISetState(@SW_HIDE, @GUI_WinHandle)
EndFunc ;==>Form_HIDE
Func GUI_Exit()
Exit
EndFunc ;==>GUI_Exit
While True * Sleep(10)
WEnd
Lg Kleiner