#include <Array.au3>
;==================================================================================================
; Function Name:    _FileDeleteAll($s_path, $s_title = "_FileDeleteAll()", $i_delete_empty_folder = 0, $i_savedelete = 0, $s_filetype = False , $s_filename = False)
; Description:      Delete all files
; Parameter(s):     $a_path 					path where to search
;                   $s_title 					title of the window
;                   $$i_delete_empty_folder     0 = delete empty folders
;                   $i_savedelete      			0 = normal delete
;												1 = save delete
;                   $s_filetype      			search and delete just one filetype e.g. .mp3
;					$s_filename					seach and delete just files with this name
; Version:          v0.81 Build 2012-05-11 Beta
; Author(s):        RedHead
;==================================================================================================

Func _FileDeleteAll($s_path, $s_title = "_FileDeleteAll()", $i_delete_empty_folder = 0, $i_savedelete = 0, $s_filetype = False , $s_filename = False)
	Local $a_ergebnis[1] = [0]
	$a_ergebnis = _FileFindAll($s_path, $a_ergebnis, $s_filetype, $s_filename)
	If Not @error Then
		If Int($a_ergebnis[0]) <> 0 Then
			Local $i_onepercent = Round(Int($a_ergebnis[0])/100)
			ProgressOn($s_title, "Dateien werden gelöscht!", "", -1, -1, 2 + 16)
			For $i = 1 To $a_ergebnis[0]
				If _FileOrFolder($a_ergebnis[$i]) <> 1 Then
					If $i_savedelete = 0 Then
						FileDelete($a_ergebnis[$i])
					Else
						_FileDeleteSave($a_ergebnis[$i])
					EndIf
					_ArrayDelete($a_ergebnis, $i)
				EndIf
				For $m = 1 To 100
					If ($m * $i_onepercent) == $i Then ProgressSet(($m * 1), ($m * 1) & " %")
				Next
			Next
			ProgressSet(100, "100 %")
			Sleep(500)
			ProgressOff()
			If Not $s_filetype And $i_delete_empty_folder = 0 Then
				$a_ergebnis[0] = UBound($a_ergebnis, 1) - 1
				If Int($a_ergebnis[0]) <> 0 Then
					For $i = 1 To $a_ergebnis[0]
						If DirGetSize($a_ergebnis[$i]) = 0 Then
							DirRemove($a_ergebnis[$i])
						EndIf
					Next
				EndIf
			EndIf
		Else
			Return SetError(-3)
		EndIf
	Else
		Return @error
	EndIf
EndFunc

Func _FileDeleteSave($s_pfad)
	Local $h_file_open = FileOpen($s_pfad, 2)

	For $x = 0 To 800
		FileWrite($s_pfad, Random(100000, 9999999999))
	Next
	FileClose($h_file_open)
	FileDelete($s_pfad)
EndFunc

Func _FileOrFolder($s_pfad)
	Local $h_file_open = FileOpen($s_pfad)

	If FileClose($h_file_open) = 0 Then
		Return 1 ; Ordner
	Else
		Return 0 ; Datei
	EndIf
EndFunc

Func _FileFindAll($s_path, ByRef $a_found, $s_filetype = False, $s_filename = False)
	If $s_path == "" Or Not IsArray($a_found) Then Return SetError(-1)
	If StringRegExp(StringLeft($s_path, 1), "[a-zA-Z]") And StringMid($s_path, 2, 1) == ":" Then
		If StringRight($s_path, 1) <> "\" Then $s_path &= "\"
		Local $s_suchen, $s_weitersuchen
		If $s_filetype Then
			If StringLeft($s_filetype, 1) <> "*" Then $s_filetype = "*" & $s_filetype
		EndIf
		$s_suchen = FileFindFirstFile($s_path & "*")
		If $s_suchen == -1 Then Return SetError(-2)
		While 1
			$s_weitersuchen = FileFindNextFile($s_suchen)
			If @error Then ExitLoop
			If @extended Then _FileFindAll($s_path & $s_weitersuchen & "\", $a_found, $s_filetype, $s_filename)
			If $s_filetype And Not $s_filename Then
				If StringRight($s_weitersuchen, StringLen($s_filetype) - 1) = StringTrimLeft($s_filetype, 1) Then _ArrayAdd($a_found, $s_path & $s_weitersuchen)
			ElseIf $s_filename And Not $s_filetype Then
				If StringLeft($s_weitersuchen, StringLen($s_filename)) = $s_filename Then _ArrayAdd($a_found, $s_path & $s_weitersuchen)
			ElseIf $s_filename And $s_filetype Then
				If StringRight($s_weitersuchen, StringLen($s_filetype) - 1) = StringTrimLeft($s_filetype, 1) And _
				StringLeft($s_weitersuchen, StringLen($s_filename)) = $s_filename Then _ArrayAdd($a_found, $s_path & $s_weitersuchen)
			Else
				_ArrayAdd($a_found, $s_path & $s_weitersuchen)
			EndIf
		WEnd
		$a_found[0] = UBound($a_found) - 1
		Return $a_found
	Else
		Return SetError(-1)
	EndIf
EndFunc
