Hallo ich habe ein "kleines Problem" beim Erweitern / umbauen der UDF von Bugfix.
Ich wollte halt eine Progressbar hinzufügen und den Output in eine Datei umleiten.
Das funktionierte auch schon allerdings war dort die Anzahl fix und die Ausgabedatei absolut in der Funktion benannt.
Nun wollte ich die Werte und ob Progress überhaupt da sein soll beim Funktionsaufruf mit übergeben.
In der Messagebox stehen anfangs noch die richtigen Werte drin, überschreibt die dann aber mit den defaults aus dem Subfoldersfunktionaufruf, beim 2.Mal.
Irgendwie habe ich da ein Brett vorm Kopf und bevor ich die Sache noch weiter verkompliziere frage ich doch mal
Besten Dank an Bugfix für die UDF, nutze ich schon recht lange.
Besten Dank auch an AspirinJunkie für _CountAllFiles, ist wirklich fix.
Spoiler anzeigen
;==================================================================================================
; Function Name: _GetFilesFolder_Rekursiv($sPath [, $sExt='*' [, $iDir=-1 [, $iRetType=0 ,[$sDelim='0']]]])
; Description: Rekursive Auflistung von Dateien und/oder Ordnern
; Parameter(s): $sPath der Basispfad für die Auflistung ('.' -aktueller Pfad, '..' -Parentpfad)
; $sExt Erweiterung für Dateiauswahl '*' oder -1 für alle (Standard)
; $iDir -1 Dateien+Ordner(Standard), 0 nur Dateien, 1 nur Ordner
; optional: $iRetType 0 gibt Array, 1 gibt String zurück
; optional: $sDelim legt Trennzeichen für Stringrückgabe fest
; 0 -@CRLF (Standard) 1 -@CR 2 -@LF 3 -';' 4 -'|'
; Return Value(s): Array (Standard) od. String mit den gefundenen Pfaden der Dateien und/oder Ordner
; Array[0] enthält die Anzahl der gefundenen Dateien/Ordner
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;
; geändert durch Dietmar // Progress integriert und Ausgabe in INI-Datei mit Dateieigenschaften
;
;==================================================================================================
Dim $Progress_count =0
;~Dim $Progress_enable
;~Dim $Progress_limit
Func _GetFilesFolder_Rekursiv($sPath, $sExt='*', $iDir=-1, $iRetType=0, $sDelim='0', $sProgress_enable=1, $sProgress_limit=0, $sExport_file="c:\dummy.ini")
;~ MsgBox(4096,"",$sPath & @CR & $sExt & @CRLF & $iDir & @CRLF & $iRetType & @CRLF & $sDelim & @CRLF & $sProgress_enable & @CRLF & $sProgress_limit & @CRLF & $sExport_file)
;~ Exit
$sPath_Len = StringLen($sPath)
If $sProgress_limit = 0 Then
$sProgress_enable = 0
Else
If $sProgress_enable = 1 Then
$sProgress_count = 0
ProgressOn("Dateiliste von '" & $sPath & "' wird erstellt", "Bitte haben Sie etwas Geduld.")
EndIf
EndIf
Global $oFSO = ObjCreate('Scripting.FileSystemObject')
Global $strFiles = ''
Switch $sDelim
Case '1'
$sDelim = @CR
Case '2'
$sDelim = @LF
Case '3'
$sDelim = ';'
Case '4'
$sDelim = '|'
Case Else
$sDelim = @CRLF
EndSwitch
If ($iRetType < 0) Or ($iRetType > 1) Then $iRetType = 0
If $sExt = -1 Then $sExt = '*'
If ($iDir < -1) Or ($iDir > 1) Then $iDir = -1
_ShowSubFolders($oFSO.GetFolder($sPath),$sExt,$iDir,$sDelim,$sProgress_enable,$sProgress_limit,$sExport_file,$sPath_Len)
If $iRetType = 0 Then
Local $aOut
$aOut = StringSplit(StringTrimRight($strFiles, StringLen($sDelim)), $sDelim, 1)
If $aOut[1] = '' Then
ReDim $aOut[1]
$aOut[0] = 0
EndIf
Return $aOut
Else
Return StringTrimRight($strFiles, StringLen($sDelim))
EndIf
If $sProgress_enable = 1 Then ProgressOff()
EndFunc
Func _ShowSubFolders($Folder, $Ext='*', $Dir=-1, $Delim=@CRLF, $Progress_enable=1, $Progress_limit=2000, $Export_file="d:\dummy.ini",$Path_Len=1)
[/autoit] [autoit][/autoit] [autoit];~ MsgBox(4096,"",@CRLF & $Ext & @CRLF & $Dir & @CRLF & $Delim & @CRLF & $Progress_enable & @CRLF & $Progress_limit & @CRLF & $Export_file & @CRLF & $sPath_Len)
;~ Exit
If Not IsDeclared("strFiles") Then Global $strFiles = ''
If ($Dir = -1) Or ($Dir = 0) Then
For $file In $Folder.Files
If $Ext <> '*' Then
If StringRight($file.Name, StringLen($Ext)) = $Ext Then _
$strFiles &= $file.Path & $Delim
Else
IniWrite($Export_file,StringTrimRight(StringTrimLeft($file.path,$Path_Len),StringLen($file.name)),$file.Name,'"' & $file.Size & "|" & $file.DateCreated & "|" & $file.DateLastModified & "|" & FileGetVersion($file.Path,"FileVersion") & "|" & FileGetVersion($file.Path,"ProductVersion") & '"')
If $Progress_enable = 1 Then
$Progress_count = $Progress_count + 1
ProgressSet($Progress_count/($Progress_limit/100), $Progress_count & " von " & $Progress_limit & " Dateien ermittelt")
EndIf
$strFiles &= $file.Path & $Delim
EndIf
Next
EndIf
For $Subfolder In $Folder.SubFolders
If ($Dir = -1) Or ($Dir = 1) Then $strFiles &= $Subfolder.Path & '\' & $Delim
_ShowSubFolders($Subfolder, $Ext, $Dir, $Delim)
Next
EndFunc
[/autoit]Aufgerufen wird das ganze aus der Hauptgui wie folgt
[autoit]_GetFilesFolder_Rekursiv($searchdir, '*', 0, 0, 0, 1, _CountAllFiles($searchdir,1), $tmp_file)
[/autoit]Und dies hier wird genommen anstatt die zur übergebenen Funktion
[autoit]$Progress_enable=1, $Progress_limit=2000, $Export_file="d:\dummy.ini",$Path_Len=1
[/autoit]Wäre über Tipps erfreut