Liebe Programmierer
Ich würde gerne von einem bestimmten Verzeichnis aus in dem betreffenden
Verzeichnis und seinen Unterverzeichnissen eine Datei suchen, die in dieser
Struktur (Verzeichnisse und Unterverzeichnisse) auch mehrfach vorkommen
könnte. Die ganze Rekursion sollte mir ein Array mit den Treffern (Verzeichnis/Unterverzeichnisse,
in denen die betreffende Datei mit dem entsprechenden DateiNamen gefundenen wurde)
zurück geben.
Da ich mich nicht wundern würde, wenn sich schon mal jemand mit diesem
Problem beschäftigt hat, erlaube ich mir, hier anzufragen, ob diesbezüglich
bereits Erfahrungen vorhanden sind?
Ich wünsche allen einen schönen Abend und schicke herzliche Grüsse!
Grilli
Aua... Hilfe - Rekursion...
Moderator: Moderatoren
-
- Rekursionen-Architekt
- Beiträge: 116
- Registriert: Do, 18. Jul 2013 11:56
- Kontaktdaten:
- AUGE_OHR
- Marvin
- Beiträge: 12940
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 20 Mal
- Danksagung erhalten: 48 Mal
Re: Aua... Hilfe - Rekursion...
hi Grilli,
so sammel ich Files ein
p.s. mit "Everything" geht es in Sekunden, im Forum sollte es den Source für eine "Wrapper" geben
https://www.voidtools.com/downloads/
so sammel ich Files ein
Code: Alles auswählen
STATIC aFilesCopy := {}
STATIC nFilesSum := 0
STATIC lOnlyNew = .F.
PROCEDURE MAIN
...
// now search recursiv in Directory
RECUDIRS( cFullSource + "\", "*.*","DHS" )
Code: Alles auswählen
FUNCTION Recudirs( cPath, cMask, cAttr )
LOCAL c_File
LOCAL n_Size
LOCAL c_Attr
LOCAL a_DIR
LOCAL n_LEN
LOCAL n_Count
a_DIR := DIRECTORY( cPath + cMask, cAttr )
n_LEN := LEN( a_DIR )
FOR n_Count := 1 TO n_LEN
c_File := a_DIR[ n_Count, F_NAME ]
c_Attr := a_DIR[ n_Count, F_ATTR ]
n_Size := a_DIR[ n_Count, F_SIZE ]
IF ( c_File = ".." .AND. LEN( c_File ) = 2 ) .OR. ;
( c_File = "." .AND. LEN( c_File ) = 1 )
LOOP
ENDIF
IF "D" $ c_Attr
RECUDIRS( cPath + c_File + "\", cMask, cAttr )
ELSE
IF lOnlyNew = .T. // if lOnlyNew
IF "A" $ c_Attr // it must have "A"
ELSE
LOOP
ENDIF
ENDIF
AADD( aFilesCopy, { cPath, c_File, c_Attr, n_Size } )
nFilesSum += n_Size
ENDIF
NEXT
RETURN .T.
https://www.voidtools.com/downloads/
gruss by OHR
Jimmy
Jimmy
-
- Rekursionen-Architekt
- Beiträge: 116
- Registriert: Do, 18. Jul 2013 11:56
- Kontaktdaten:
Re: Aua... Hilfe - Rekursion...
Guten Tag Jimmy
Danke für die interessante Lösung!
Das geh ich heute im Sinne eines LernProzesses durch und bin Dir sehr dankbar!
Ein schönes WochenEnde und herzliche Grüsse
Grilli
Danke für die interessante Lösung!
Das geh ich heute im Sinne eines LernProzesses durch und bin Dir sehr dankbar!
Ein schönes WochenEnde und herzliche Grüsse
Grilli
- nightcrawler
- 1000 working lines a day
- Beiträge: 677
- Registriert: Di, 24. Apr 2012 16:33
- Wohnort: 72184 Weitingen
- Hat sich bedankt: 4 Mal
- Danksagung erhalten: 109 Mal
- Kontaktdaten:
Re: Aua... Hilfe - Rekursion...
mit einer Änderung: Ich würde für die Liste "aFilesCopy" kein static nehmen, sondern eher das Array in der Funktion erstellen und dann zum Verbinden zurückliefern.
Code: Alles auswählen
aFilesCopy := RECUDIRS( cFullSource + "\", "*.*","DHS" )