Office: Dir(Path, vbDirectory) liefert Dateinamen

Helfe beim Thema Dir(Path, vbDirectory) liefert Dateinamen in Microsoft Access Hilfe um das Problem gemeinsam zu lösen; Hallo, ich schon wieder! Ich versuche mir die Verzeichnisstruktur eines Laufwerks auszulesen und möchte nur die Verzeichnisse ausgegeben bekommen.... Dieses Thema im Forum "Microsoft Access Hilfe" wurde erstellt von Toast78, 14. Februar 2012.

  1. Dir(Path, vbDirectory) liefert Dateinamen


    Hallo, ich schon wieder!

    Ich versuche mir die Verzeichnisstruktur eines Laufwerks auszulesen und möchte nur die Verzeichnisse ausgegeben bekommen. Aber schon beim ersten Aufruf von Dir(Path, vbDirectory) wird mir eine Datei zurückgegeben. Habe ich die Dir-Funktion falsch verstanden?
    Hier mal meine bisherigen geistigen Ergüsse. Aufruf der Prozedur übers Testfenster:
    Call readStructure("G:\")
    und der Code
    Code:
    :)
     
    Toast78, 14. Februar 2012
    #1
  2. In der Hilfe sieht der Beispielcode von MS aber etwas anders aus:
    Code:
     
  3. Funktioniert auch nicht. Habe ich schon davor probiert.
     
    Toast78, 15. Februar 2012
    #3
  4. Dir(Path, vbDirectory) liefert Dateinamen

    Habe hier zwar nichts zum Dir Befehl, arbeite aber des öfteren mit dem FSO!

    Musst deinen Code nur etwas anpassen, damit die Debug.Print Ergebnisse wie von dir gewünscht in deiner Tabelle landen!
    Code:
     
  5. Hallo Toast,

    DIR in Verbindung mit Rekursion hat seine Tücken. Zudem liefert die Option vbDirectory Dateien UND Ordner - aber eben nicht nur.
    vgl. hier

    Der Ansatz mit FSO wäre auch meine Idee, sofern es nicht zuviele Verzeichnisse sind, denn wirklich schnell ist diese Methode nicht.

    Für eine Anfrage auf Excel-Seite hatte ich mal dieses "Skelett" errichtet:
    Code:
    Vielleicht hilft's.

    @grzi
    Du erstellst bei jedem Durchlauf der Rekursion ein neues FSO - da bremst m. E. nur unnötig aus.

    Grüße
    EarlFred
     
    EarlFred, 16. Februar 2012
    #5
  6. Hallo Toast78.
    Ja, oder vermutlich nicht ganz bis zu Ende gedacht... *wink.gif*
    Code:
    Der Aufbau der Parameterwerte legt den Schluss nahe, dass diese additiv zu verwenden sind, d.h. "0 = normal" (="gib mir die Dateinamen") ist stets dabei, Verzeichnisse und sonstige Attribute nur auf Anforderung. Nur bei Wert 8 ist die Ausnahme von dieser Regel erwähnt. Da bist du wahrscheinlich mit dem o.g. Beispiel besser bedient.
     
    Zuletzt von einem Moderator bearbeitet: 7. Januar 2021
    Anne Berg, 16. Februar 2012
    #6
  7. Ist zwar nur ein Beispiel-Code - aber wo du recht hast!
    Performancegewinn ~25%!
     
    Zuletzt von einem Moderator bearbeitet: 7. Januar 2021
  8. Dir(Path, vbDirectory) liefert Dateinamen

    Habe einiges rausgefunden:
    Über GetAttr() kann man zwar die Verzeichnisse bekommen, aber die Rekursion klappt tatsächlich nicht, wie EarlFred schon angemerkt hat. Nachdem ich in der tiefsten Rekursions-Ebene alle Dateien abgeackert hatte, bekam ich die Fehlermeldung:
    Laufzeitfehler 5:
    Ungültiger Prozeduraufruf oder ungültiges Argument

    Hatte auch schon versucht den Fehler abzufangen, aber das brachte auch nichts. Naja, mein bisheriger Code: Code:
    Der Tipp mit der Dir$-Funktion geht auch nicht VB 5/6-Tipp 0414: Ordner mit Dir$ rekursiv durchsuchen - ActiveVB
     
    Toast78, 16. Februar 2012
    #8
  9. Probiers mal so:
    Code:
    Stand aber so ähnlich schon in der Antwrt von ios707
     
  10. Oh, das hab ich wohl übersehen, dass ios707 das schon geschrieben hatte *rotwerd*
     
  11. Sooo! Habs auf die Kette bekommen.
    Meine Version basiert jetzt eher auf der Breitensuche. Habe mich dabei an die Variante von http://www.arstechnica.de/index.html...a/vba0012.html

    orientiert. Hier meine Lösung: Code:
     
  12. Gibt es einen Grund, warum du das nicht mit dem FSO löst?

    Habe deine Lösung mal auf einen Folder mit ~400 SubFoldern getestet gegen eine strukturell gleich aufgebaute FSO-Lösung:
    Dir-Version: 1,871094Sek.
    FSO-Version: 0,84375Sek.

    Deine Lösung erscheint mir nicht so arg performant... *wink.gif*
    Beispiel kann ich dir bei Bedarf einstellen.
     
  13. Dir(Path, vbDirectory) liefert Dateinamen

    Oh okay. Auch interessant zu wissen. Hatte wesentlich länger gebraucht. Beim Einlesen meines Laufwerks mit 600 Verzeichnissen, habe ich ca. 10 Sekunden gebraucht.
     
  14. Habe meine Lösung auf Basis eines Arrays aufgebaut, kannst ja mal testen wie das mit einer Collection aussieht!

    Hier zum testen - oder wegschauen und erst mal selbst probieren *wink.gif*
    Code:
    Zum Stoppen der Zeit:
    Code:
    Viel Spass!

    hier noch die Reference für das FSO: http://msdn.microsoft.com/en-us/libr...(v=vs.84).aspx
     
  15. Zur Komplettierung und um die Messungen Fair zu halten, muss bei beiden Varianten dafür gesorgt werden, dass auch die Ergebnisse überein stimmen!

    Zu Zwei ist mir noch eine leichte Performance-Verbesserung gelungen, die ich nicht vorenthalten möchte. Diese betrifft allerdings nur bedingt kleine Datenmengen (darunter verstehe ich bis ~2Tsd)!

    Code:
     
Thema:

Dir(Path, vbDirectory) liefert Dateinamen

Die Seite wird geladen...
  1. Dir(Path, vbDirectory) liefert Dateinamen - Similar Threads - Path vbDirectory liefert

  2. Suche liefert keine Ergebnisse

    in Microsoft Outlook Hilfe
    Suche liefert keine Ergebnisse: Ich nutze Windows 11 Home mit Outlook 2007, wo ich zwei IMAP-Postfächer eingebunden habe. Die Suche im Posteingang liefert keine Ergebnisse, egal welche Wörter eingebe. Ich habe die Indizierung...
  3. Suchfunktion liefert KEIN Ergebnis

    in Microsoft Outlook Hilfe
    Suchfunktion liefert KEIN Ergebnis: Hallo, ich bräuchte mal Eure Hilfe ... Bei mir funktioniert die Suchfunktion in Outlook 365 so überhaupt nicht. Egal was ich für ein Wort eingebe ... kommt immer keine Ergebnisse Indizierung...
  4. Makro um "wer liefert was" einzulesen

    in Microsoft Excel Hilfe
    Makro um "wer liefert was" einzulesen: Hallo liebes Forum, momentan mache ich ein Praktikum in einer Firma. Wie es als Praktikant so üblich ist, bekommt man da die Arbeit, die sonst keiner machen will. In meinem Fall ist das jetzt 4000...
  5. DoCmd RunSql liefert Fehler in einer Funktion

    in Microsoft Access Hilfe
    DoCmd RunSql liefert Fehler in einer Funktion: Hallo Leute. Mit der folgenden Code in "Private Sub" gibt es kein Problem. Alles läuft super. Ich bruche diesen Code als Function, damit ich es aus einem Makro ausführen lassen möchte (oder...
  6. Automatische Antowrt an "Reply-To" anstelle "Return-Path"

    in Microsoft Outlook Hilfe
    Automatische Antowrt an "Reply-To" anstelle "Return-Path": Grüße, ich habe die Google Suche als auch die Foren Suche erfolglos versucht, daher ein neuer Eintrag. Folgendes Problem: ich möchte emails automatisch mit einer Vorlage beantworten, jedoch...
  7. Docmd.TransferText liefert Fehler 2046 Der Befehl oder die Aktion steht momentan...

    in Microsoft Access Hilfe
    Docmd.TransferText liefert Fehler 2046 Der Befehl oder die Aktion steht momentan...: Hallo zusammen, ich verwende den Befehl Docmd.TransferText. Dieser liefert zeitweise den Laufzeitfehler 2046 "Der Befehl oder die Aktion TransferText' steht momentan nicht zur Verfügung."...
  8. Array-Formel liefert #WERT! - Brauche Hilfe!

    in Microsoft Excel Hilfe
    Array-Formel liefert #WERT! - Brauche Hilfe!: Ich habe folgende Array-Formel, die allerdings kein Ergebnis liefert, sondern #WERT! als Fehlermeldung liefert:...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden