Hallo zusammen,
ich brauche ma wieder eure hilfe bei einem teil meines Ordnerdurchsuchungsprogramm ich weiß bin nervig
Derzeitig erstellt mein Programm ein 2D-Array, in der ersten Spalte wird ein Ordnerpfad geschrieben, in der 2ten Spalte wird der Inhalt einer Datei niedergeschrieben.
Jetzt will ich eine 3t Spalte erstellen und in dieser soll stehen welche dateien in diesem Ordnerpfad drinne stehen.
Hier der Quellcode, wodurch es wahrscheinlich einfach wird meinen Ansätzen zu folgen:
Spoiler anzeigen
;Idee Herr Wegert. Umsetzung Herr Kellermann, mit Hilfe von Herr Wegert und einigen user von http://www.autoit.de Forum
;vielen Dank an Fabian, progandy, ideas2code, Water, M-Obi und Schnitzel
;====================================================================================================================================
;Recursive File Lister
#include <Array.au3>
#include <Date.au3>
#include <file.au3>
;Main Programmm anfang
;deklaration der variablen
Dim $FolderName = "E:\Autoit_testordner" ;zu durchsuchender ort
Dim $FileCount = 0 ;setzt den zähler auf 0
Dim $zeile = 1 ;setzen von size auf 10
Dim $used = 0 ;setzen von used auf 0
Dim $blocksize = 1 ;setzen von blocksize auf 1
Dim $spalte = 3 ;setzen der spaltenanzahl auf 2
Dim $avArray[$zeile][$spalte] ;erstellen eines arrays mit größe size und 2 spalte
ScanFolder($FolderName) ;startet die durchsuchung des ortes
_ArraySort($avArray) ;sortiert das Array
MakeIndexFile($avArray) ;aufrufen von MakeIndexFile
_ArrayDisplay($avArray, "Arrayinhalt") ;zeigt Fenster mit Arrayinhalt
MsgBox(0, "Done", "Folder Scan Complete. Scanned " & $FileCount & " Files") ;Ausgabebox mit Meldung das durchsuchung fertig ist und wieviele dateien/ordner gefunden wurden
;beginn des durchsuchungvorganges
Func ScanFolder($SourceFolder)
Local $Search
Local $File
Local $FileAttributes
Local $FullFilePath
;schleife zur überprüfung der arraygröße
If $used = $zeile Then ;wenn used gleich zeile und spalte ist
$zeile = $zeile + $blocksize ;erweitern von size um blocksize
ReDim $avArray[$zeile][$spalte] ;vergrößern des arrays
EndIf
;schleifenende
$avArray[$used][0] = $SourceFolder ;schreibt $sourcefolder in das Array
$used = $used + 1 ;erweitert used um 1
$StopfileName = $SourceFolder & "\STOPFILE.txt" ;setzen von $stopfilename
$StopfileExists = FileExists($StopfileName) ;überprüfe ob STOPFILLE.txt exestiert und schreib 1 oder 0 in variable
If $StopfileExists == 1 Then ;if stopfileexists true dann
$avArray[$used - 1][1] = FileRead ($StopfileName) ;schreibe in array spalte 2 vorherige zeile inhalt auf stopfilename
EndIf
$Search = FileFindFirstFile($SourceFolder & "\*.*") ;finde erste datei
[/autoit] [autoit][/autoit] [autoit];schleifenbeginn zum durchsuchen der ordner und schreiben in eine txt datei
While 1
If $Search = -1 Then ;wenn search nichts vorhanden ist dann
ExitLoop ;dann verlasse schleife
EndIf
$File = FileFindNextFile($Search) ;nächste file finden
If @error Then ExitLoop ;fehler = schleife verlassen
$FullFilePath = $SourceFolder & "\" & $File ;zusammensetzen des pfades der datei
$FileAttributes = FileGetAttrib($FullFilePath) ;attribute abfragen
If StringInStr($FileAttributes, "D") Then ;überprüfe FileAttributes, wenn D(irectory) dann
If (not $StopfileExists) Then ;prüfe ob STOPFILE.txt nicht vorhanden ist
ScanFolder($FullFilePath) ;springe zu ScanFolder (schleife von vorne)
EndIf
Else
;$avArray[$used-1][2] = $File ;zu testzweck für Variante 2
LogFile($FullFilePath) ;gehe zu LogFile
EndIf
WEnd
;schleifenende
FileClose($Search)
EndFunc
;ende des durchsuchungvorganges
[/autoit] [autoit][/autoit] [autoit];beginn des vorganges zum schreiben in eine txt datei
Func LogFile($FileName)
FileWriteLine(@ScriptDir & "\FileList.txt", $FileName) ;Schreibe in Filelist.txt FileName
$FileCount += 1 ;erhöhe FileCount um 1
EndFunc
;ende des vorganges zum schreiben in eine txt datei
;beginn der erstellung einer HMTL datei mit Verlinkung zum Directory
Func MakeIndexFile($avArray)
Local $pos = 0
Local $Nr = 1
Local $Nr2 = 1
Local $sType = 4
$html = FileOpen(@ScriptDir & "\filelist.html", 2) ;Datei wird im Schreibmodus geöffnet, aktueller Inhalt wird gelöscht. Wenn die Datei nicht existiert wird sie erstellt.
FileWriteLine(@ScriptDir & "\filelist.html", "<html>")
FileWriteLine(@ScriptDir & "\filelist.html", "<head>")
FileWriteLine(@ScriptDir & "\filelist.html", "<title>")
FileWriteLine(@ScriptDir & "\filelist.html", "Laufwerkstand von " & $FolderName & " zuletzt ausgelesen am: " & _NowDate() & " um " & _NowTime($sType) & "</title>")
FileWriteLine(@ScriptDir & "\filelist.html", "</head>")
FileWriteLine(@ScriptDir & "\filelist.html", "<body bgcolor=" & '"' & '#' & "218429" & '"' & ">")
FileWriteLine(@ScriptDir & "\filelist.html", "<p>" & "<font color=" & '"' & "#" & "FFFFFF" & '"' & ">" & "<B>" & "<TT>" & "<Font size =+2" & ">" & "Laufwerkstand von " & $FolderName & " zuletzt ausgelesen am: " & _NowDate() & " um " & _NowTime($sType) & "</font>" & "</TT>" & "<br>" & "</p>")
FileWriteLine(@ScriptDir & "\filelist.html", "<table border=" & '"1"' & ">" & "<tr>" & "<th>" & "Nr." & "</th>" & "<th>" & "Pfad" & "</th>" & "<th>" & "Intern" & "</th>" & "<th>" & "Extern" & "</th>" & "</tr>")
For $pos = 0 To UBound($avArray) - 1 ;forschleife zum auslesen des arrays
FileWriteLine(@ScriptDir & "\filelist.html", "<p>" & "<tr>" & "<td>" & "<font color=" & '"' & "#" & "FFFFFF" & '"' & ">" & $Nr & ")" & "</td>" & "<td>" & "<font color=" & '"' & "#" & "FFFFFF" & '"' & ">" & $avArray[$pos][0] & "</td>" & "<td>" & "</font>" & "<a href=" & '"' & '#' & "AnkerNr" & $Nr & '"' & ">" & "<img src=" & '"' & "Folder_open.GIF" & '"' & "alt=" & '"' & "Open" & '"' & ">" & "</a>" & "</td>" & "<td>" & "<a href=" & '"' & $avArray[$pos][0] & '"' & ">" & "<img src=" & '"' & "Change_symbol.GIF" & '"' & "alt=" & '"' & "Change" & '"' & ">" & "</a>" & "</td>" & "</tr>" & "<p>")
$Nr = $Nr + 1
Next
FileWriteLine(@ScriptDir & "\filelist.html", "</table>")
FileWriteLine(@ScriptDir & "\filelist.html", "<br>" & "<br>" & "<br>" & "<br>" & "<br>")
;teil zum erstellen der detailanzeige
FileWriteLine(@ScriptDir & "\filelist.html", "<B>" & "<big>" & "Übersicht" & "</B>" & "</big>")
For $pos = 0 To UBound($avArray) -1
FileWriteLine(@ScriptDir & "\filelist.html", "<p align=" & '"' & "left" & '"' & ">" & "<b>" & "<font color=" & '"' & "#" & "FFFFFF" & '"' & ">" & "<a name=" & '"' & "AnkerNr" & $Nr2 & '"' & ">" & $avArray[$pos][0] & "</a>" & "</b>" & "<br>")
FileWriteLine(@ScriptDir & "\filelist.html", "<p align=" & '"' & "left" & '"' & ">" & "<font color=" & '#' & "000000" & ">" & $avArray[$pos][1] & "</font>")
$Nr2 = $Nr2 + 1
Next
;ende erstellung der detailanzeige
[/autoit] [autoit][/autoit] [autoit]FileWriteLine(@ScriptDir & "\filelist.html", "</body>")
FileWriteLine(@ScriptDir & "\filelist.html", "</html>")
FileClose($html)
EndFunc
;ende der erstellung
Ich habe überlegt und mir sind 2 Ansätze nur eingefallen um das umzusetzen.
1) Derzeitig wird noch ein "Filelist.txt" erstellt wo die Dateien drinne stehen mit Pfad usw. Da wäre meine idee, diese zu nehmen und einzulesen, allerdings ist diese liste nicht sortiert, wodurch sehr wahrscheinlich die zuordnung nicht ordentlich erfolgt. Sprich müsste ich da eine Überprüfung stattfinden lassen.
2)Beim Durchlauf für die "Filelist.txt" hat ehr ja eh schon die Datei im Speicher, also könnte man diese auch gleich im Array legen und damit würde die "Filelist.txt" später wegfallen können. Diesen Ansatz hab ich auch schon angetest mit dem Ergebniss, dass er manche dateien im Array falsch platziert, also müsste hier auch eine extra überprüfung nochma stattfinden.
Ich bin jetzt leicht unschlüssig welche der beiden Varianten besser geeignet wäre um das ganze umzusetzen. Und 2 Fragen geistern mir dazu auch noch im Kopf^^
Wie kann ich die Dateien einfach hintereinander als "File1,File2,File3..." schreiben lassen im array (also das es auch angezeigt wird)? Und ein Kollege meinte man könnte in einer Arrayzelle Zeilenumbrüche einbauen, stimmt das?
Bin für jede andere Idee offen um das ganze umzusetzen
Hoffe ihr könnt mir ein Schubser in die richtige Richtung geben
freundliche Grüße und vielen Dank
Maurawani