Directory() nur Verzeichnisse finden
Moderator: Moderatoren
- Manfred
- Foren-Administrator
- Beiträge: 21186
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Directory() nur Verzeichnisse finden
mir brummt der Schädel, deshalb stelle ich euch jetzt mal die Frage:
ich möchte gerne rekursiv ein komplettes Laufwerk durchsuchen, mir aber nur erstmal die Verzeichnisse einfangen. Wie kann man das bewerkstelligen, das NUR Verzeichnisse ermittelt werden? Ich habe jetzt immer Dateien mit dabei. Wie kann man die ausklammern? Oder von mir aus auch, wie erkenne ich, ob es Dateien sind? Gibt es da ein Merkmal, das zurückgeliefert wird bei Directory()? Wenn ich das erkennen kann, kann ich darauf ja achten. Aber im Moment renne ich absolut im Kreis wie ein Köter, der sich selbst beissen will.
ich möchte gerne rekursiv ein komplettes Laufwerk durchsuchen, mir aber nur erstmal die Verzeichnisse einfangen. Wie kann man das bewerkstelligen, das NUR Verzeichnisse ermittelt werden? Ich habe jetzt immer Dateien mit dabei. Wie kann man die ausklammern? Oder von mir aus auch, wie erkenne ich, ob es Dateien sind? Gibt es da ein Merkmal, das zurückgeliefert wird bei Directory()? Wenn ich das erkennen kann, kann ich darauf ja achten. Aber im Moment renne ich absolut im Kreis wie ein Köter, der sich selbst beissen will.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Martin Altmann
- Foren-Administrator
- Beiträge: 16509
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Directory() nur Verzeichnisse finden
Schau Dir doch mal die Hilfe dazu an:
Viele Grüße,
Martin
Code: Alles auswählen
aAlle := Directory( datenpfad + "\*", "D" )
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: Directory() nur Verzeichnisse finden
also mitMartin Altmann hat geschrieben: Schau Dir doch mal die Hilfe dazu an:Code: Alles auswählen
aAlle := Directory( datenpfad + "\*", "D" )
Code: Alles auswählen
PROCEDURE MAIN
LOCAL datenpfad := "C:"
LOCAL aAlle := Directory( datenpfad + "\*", "D" )
LOCAL i,iMax
iMax := LEN(aAlle)
FOR i := 1 TO iMax
? aAlle[i][1]
NEXT
WAIT
RETURN
gruss by OHR
Jimmy
Jimmy
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: Directory() nur Verzeichnisse finden
wenn du ein "D" bei Directory() angibst dann werden auch(!) Verzeichnisse berücksichtigt.Manfred hat geschrieben: Wie kann man die ausklammern? Oder von mir aus auch, wie erkenne ich, ob es Dateien sind? Gibt es da ein Merkmal, das zurückgeliefert wird bei Directory()?
Verzeichnisse haben nun das Attribut "D" aber man muss auf
Code: Alles auswählen
IF "D" $ aDir[i][F_ATTR]
... und wenn du alle Verzeichnisse hast was dann ? Anzeige als ... ?
wenn du jeweils nur 1 Verzeichniss jeweils benötigst dann schau dir mal das Demo \_JHV2016\2\1\LBDIR.PRG an.
das war die Geschichte wo man "intern" eine XbpListbox() "füllen" konnte mit einer API Funktion.
gruss by OHR
Jimmy
Jimmy
- Martin Altmann
- Foren-Administrator
- Beiträge: 16509
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Directory() nur Verzeichnisse finden
Hmm. Ich habe bei mir als Platzhalter *. angegeben und das funktioniert.
Den . hatte ich hier entfernt, falls Manfred Verzeichnisnamen mit einem . drin hat. Danke für den Hinweis, da muss ich dann wohl bei mir was ändern, schließlich gibt es auch Dateinamen ohne Endung, die er dann als Verzeichnis interpretieren würde.
Viele Grüße,
Martin
Den . hatte ich hier entfernt, falls Manfred Verzeichnisnamen mit einem . drin hat. Danke für den Hinweis, da muss ich dann wohl bei mir was ändern, schließlich gibt es auch Dateinamen ohne Endung, die er dann als Verzeichnis interpretieren würde.
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Manfred
- Foren-Administrator
- Beiträge: 21186
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Directory() nur Verzeichnisse finden
OK,
es geht in der Hauptsache darum, dass ich erstmal ein Laufwerk komplett durchlaufen möchte um festzustellen, welche Verzeichnisse mit Unterverzeichnissen es gibt. Wenn ich alle Verzeichnisnamen ermittelt habe, dann möchte ich mit dem Ergebnis alle Verzeichnisse durchsuchen nach Dateien. Ist das zu kompliziert gedacht? Hat jemand eine einfacherere Lösung? Mir fällt nichts anderes ein. Wobei, wie Martin schon erwähnt hat, mir gestern auch aufgefallen ist, dass es nicht nur x.3, sonder x und x.x Dateiformate gibt. Also mit SubStr(name,-4,1) = "." war das ein Schuß in den ofen, wie ich klarerweise feststellen mußte.
es geht in der Hauptsache darum, dass ich erstmal ein Laufwerk komplett durchlaufen möchte um festzustellen, welche Verzeichnisse mit Unterverzeichnissen es gibt. Wenn ich alle Verzeichnisnamen ermittelt habe, dann möchte ich mit dem Ergebnis alle Verzeichnisse durchsuchen nach Dateien. Ist das zu kompliziert gedacht? Hat jemand eine einfacherere Lösung? Mir fällt nichts anderes ein. Wobei, wie Martin schon erwähnt hat, mir gestern auch aufgefallen ist, dass es nicht nur x.3, sonder x und x.x Dateiformate gibt. Also mit SubStr(name,-4,1) = "." war das ein Schuß in den ofen, wie ich klarerweise feststellen mußte.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Martin Altmann
- Foren-Administrator
- Beiträge: 16509
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Directory() nur Verzeichnisse finden
Manfred,
Rekursion ist das Zauberwort
Schreibe eine Funktion, die alle Einträge in einem Verzeichnisse ermittelt und als Array zurückgibt. Vor dem Zurückgeben loopst Du noch über die Einträge - für jeden Eintrag, der in dem F_ATTR ein "D" enthält, rugst Du Deine Funktion erneut auf (dann natürlich mit diesem Eintrag als Parameter - kompletten Pfad vorne ran!)
Viele Grüße,
Martin
Rekursion ist das Zauberwort
Schreibe eine Funktion, die alle Einträge in einem Verzeichnisse ermittelt und als Array zurückgibt. Vor dem Zurückgeben loopst Du noch über die Einträge - für jeden Eintrag, der in dem F_ATTR ein "D" enthält, rugst Du Deine Funktion erneut auf (dann natürlich mit diesem Eintrag als Parameter - kompletten Pfad vorne ran!)
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Manfred
- Foren-Administrator
- Beiträge: 21186
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Directory() nur Verzeichnisse finden
Hi martin,
so mache ich das ja auch, aber es kam zeitweise Murks dabei heraus. Mal fehlte was, dann waren wieder Dateien drin. Und es ist sehr schwer bei über 1000 Verzeichnissen das zu verifizieren, ob es vom Ergebnis her stimmen kann.
so mache ich das ja auch, aber es kam zeitweise Murks dabei heraus. Mal fehlte was, dann waren wieder Dateien drin. Und es ist sehr schwer bei über 1000 Verzeichnissen das zu verifizieren, ob es vom Ergebnis her stimmen kann.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Jan
- Marvin
- Beiträge: 14651
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Directory() nur Verzeichnisse finden
Ich muß gestehen, das ich da so meine Probleme mit habe. Wenn ich als zweiten parameter ein "D" angebe, bekomme ich nach einem kurzen test nur die Verzeichnisse in das Array geschrieben. Und selbst wenn da noch Dateien bei sein sollten: Der 5. Eintrag in jedem Arraysatz gibt an, ob das ein Verzeichnis ist (z. B. "D", oder "AD"). Das kann man doch locker abarbeiten.
Allerdings habe ich das mit der 2.0 getest.
Jan
Allerdings habe ich das mit der 2.0 getest.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Manfred
- Foren-Administrator
- Beiträge: 21186
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Directory() nur Verzeichnisse finden
richtig, ich will ja erstmal nur die verzeichnisse haben. Und zwar alle. Dann durchforste ich das Ergebnis nochmal um mir die Dateien anzeigen zu lassen. Anders wüßte ich auch keine Lösung.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Manfred
- Foren-Administrator
- Beiträge: 21186
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Directory() nur Verzeichnisse finden
ich glaube ich habe das Problem entdeckt. Ich habe zuerst mit dem TotalCommander das Laufwerk durchsuchen lassen und ein Ergebnis erhalten, was sich mit meinem nicht deckte. Dann habe ich mir aber die Parameter vom TC angesehen und da waren auch Archive mit bei. Das habe ich erstmal deaktiviert und was die Verzeichnisse angeht, ist es jetzt gleich. OK, also nächster Schritt.
Also der Hinweis von Jimmy war erstmal Gold wert. Das hatte ich zwar irgendwie gesucht in der Anleitung, aber nicht gefunden.
Also der Hinweis von Jimmy war erstmal Gold wert. Das hatte ich zwar irgendwie gesucht in der Anleitung, aber nicht gefunden.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Werner_Bayern
- Der Entwickler von "Deep Thought"
- Beiträge: 2121
- Registriert: Sa, 30. Jan 2010 22:58
- Wohnort: Niederbayern
- Hat sich bedankt: 30 Mal
- Danksagung erhalten: 72 Mal
Re: Directory() nur Verzeichnisse finden
Servus Manfred,
dazu gabs mal eine Funktion GetAllFiles, kann aber weder bei Alaska noch hier im Forum den Quelltext dazu finden. Hab mir den individuell angepasst.
Musst rekursiv suchen, bei mir funktioniert das so:
und bei der Suche dann:
dazu gabs mal eine Funktion GetAllFiles, kann aber weder bei Alaska noch hier im Forum den Quelltext dazu finden. Hab mir den individuell angepasst.
Musst rekursiv suchen, bei mir funktioniert das so:
Code: Alles auswählen
aFiles := Directory(cFolderName, "DSH")
Code: Alles auswählen
if "D" $ aFiles[dwN, F_ATTR] .and. .not. aFiles[dwN, F_NAME][1] == "."
es grüßt
Werner
<when the music is over, turn off the lights!>
Werner
<when the music is over, turn off the lights!>
- HaPe
- 1000 working lines a day
- Beiträge: 996
- Registriert: So, 15. Nov 2015 17:44
- Wohnort: 71665 Vaihingen-Enz
- Hat sich bedankt: 17 Mal
- Danksagung erhalten: 15 Mal
Re: Directory() nur Verzeichnisse finden
Hallo Zusammen !
Von wOOdy gibst dazu den folgenden (VFP-)Code:
Von wOOdy gibst dazu den folgenden (VFP-)Code:
Code: Alles auswählen
******************************************************************************
* Program....: DirList.prg
* Version....: 1.0
* Author.....: Jürgen Wondzinski
* Date.......: 18.September 1999
* Notice.....: Copyright (c) 1999 ProLib Software GmbH, All Rights Reserved.
* Compiler...: Visual FoxPro 06.00.8492.00 für Windows
* Abstract...: Diese Routine liest ein beliebiges Verzeichnis
* : samt allen Unterverzeichnissen in eine Datei ein.
*******************************************************************************
SET TALK OFF
SET DATE GERMAN
SET CENTURY ON
SET SECONDS ON
SET STRICTDATE TO 0
SET HOURS TO 24
SET SAFETY OFF
CLOSE DATA ALL
cPfad = "c:\windows" && hier Laufwerk/Pfad eintragen
CREATE TABLE (m.cPfad+"\Dateien")( NAME C (128), SIZE N (10), TIMESTAMP T, ATTRIB C (5), PATH C (128) )
* Das ist der eigentliche Aufruf:
Treewalk(m.cPfad)
* Ergebnis anzeigen
BROWSE
RETURN
*******************************************************************
FUNCTION Treewalk (cPfad)
* Des Pudels Kern: Ein rekursiver Aufruf
*******************************************************************
LOCAL nAnzahl, i, Arr(1)
* Dateien einlesen
nAnzahl = ADIR(Arr, m.cPfad+"\*.*", "D")
ASORT(Arr)
WAIT WINDOW m.cPfad + ": " + TRANS(nAnzahl) NOWAIT
* und wegschreiben
FOR i = 1 TO m.nAnzahl
IF NOT "D" $ Arr(i,5)
INSERT INTO Dateien (NAME, SIZE, TIMESTAMP, ATTRIB, PATH) VALUES ( Arr(i,1), Arr(i,2),;
CTOT(DTOC(Arr(i,3))+" "+ Arr(i,4)), Arr(i,5), m.cPfad)
ENDIF
ENDFOR
* Directories abarbeiten
FOR i = 1 TO m.nAnzahl
IF "D" $ Arr(i,5) AND Arr(i,1) # "."
** Eins tiefer per Rekursion
Treewalk(m.cPfad + "\" + Arr(i,1))
ENDIF
ENDFOR
RETURN
--
Hans-Peter
Hans-Peter
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: Directory() nur Verzeichnisse finden
hi,
für DOS habe ich ein Programm das sich SWEEP.COM nennt was ich früher benutzt habe um *.BAK rekursive zu löschen.
das geht nun jetzt mit Xbase++ bei mir soder bblock sieht z.b. so aus.
für DOS habe ich ein Programm das sich SWEEP.COM nennt was ich früher benutzt habe um *.BAK rekursive zu löschen.
das geht nun jetzt mit Xbase++ bei mir so
Code: Alles auswählen
PROCEDURE RECUDIRS( cPath, cWildcard, bblock )
...
aDIR := DIRECTORY( cPath + "*.*", "DH" )
nLEN := LEN( aDIR )
FOR nCount := 1 TO nLEN
IF "D" $ aDIR[ nCount, F_ATTR ] .AND. .NOT. ;
( aDIR[ nCount, F_NAME ] = "." .OR. ;
aDIR[ nCount, F_NAME ] = ".." )
RECUDIRS( cPath + aDIR[ nCount, F_NAME ] + "\", cWildcard, bblock )
ELSE
EVAL( bblock, cPath, aDIR[ nCount, F_NAME ] )
ENDIF
NEXT
...
RETURN
Code: Alles auswählen
{|x,y| DO3WORK( x, y ) }
PROCEDURE DO3WORK( cPath, cFile )
...
IF Bedingung
AADD(aAlle, cPath+cFile )
ENDIF
RETURN
gruss by OHR
Jimmy
Jimmy