Wie rekursiv Durchlaufen von Verzeichnissen in C unter Windows
Letztlich will ich Reisen durch einen Ordner mit Dateien und Unterverzeichnisse, und schreiben Sie etwas zu allen Dateien, die ich finde, die haben eine bestimmte Endung(.wav in meinem Fall). bei Schleifen, wie kann ich feststellen, ob der Artikel bin ich auf ein Verzeichnis?
Traversieren von Verzeichnissen ist OS-abhängig, so dass Sie wahrscheinlich benötigen, um uns zu sagen, was OS Sie verwenden. Es gibt einige OS-unabhängige Bibliotheken. Wenn Sie mit einem von Ihnen, werden wir brauchen, um zu wissen, die geben eine gute Antwort.
Ist das ein UNIX - -y-Plattform (Mac, etc) oder Windows oder etwas ganz anderes? Viele Plattformen unterstützen den POSIX-standards (robot.mbhs.edu/wordpress/2009/...), aber auch die haben in der Regel eigene Art dies zu tun, Windows-esp (FindFirstFile/FindNextFile)
Ich bin immer noch nicht funktionieren, wie ich will. FindFirstFile ist die Ausgabe der Namen des Verzeichnisses, in dem ich Sitze, nicht die erste Datei in dem Verzeichnis, wenn ich Sie aus dem abschließenden /. Wenn ich weiß das nachgestellte / Ihr, dass Sie mir einen seltsamen Dateinamen (aaaaa-LIBVC...). Auch, beide Male FindNextFile nicht zurück überhaupt einen Wert
Ist das ein UNIX - -y-Plattform (Mac, etc) oder Windows oder etwas ganz anderes? Viele Plattformen unterstützen den POSIX-standards (robot.mbhs.edu/wordpress/2009/...), aber auch die haben in der Regel eigene Art dies zu tun, Windows-esp (FindFirstFile/FindNextFile)
Ich bin immer noch nicht funktionieren, wie ich will. FindFirstFile ist die Ausgabe der Namen des Verzeichnisses, in dem ich Sitze, nicht die erste Datei in dem Verzeichnis, wenn ich Sie aus dem abschließenden /. Wenn ich weiß das nachgestellte / Ihr, dass Sie mir einen seltsamen Dateinamen (aaaaa-LIBVC...). Auch, beide Male FindNextFile nicht zurück überhaupt einen Wert
InformationsquelleAutor pmilb | 2010-01-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist, wie Sie es tun (das ist alles aus dem Speicher, so kann es sein Fehler):
So könnte man dies nennen mag
finden alle *.wav-Dateien in C:\WINDOWS und seine Unterverzeichnisse.
Technisch nicht zu tun haben, zwei FindFirstFile () - Aufrufe, aber ich finde das pattern-matching-Funktionen von Microsoft bietet (d.h. PathMatchFileSpec oder was auch immer) sind nicht so gut wie FindFirstFile(). Obwohl für "*.wav" wäre es wohl in Ordnung sein.
Danke! Neben ein paar kleinere typeos es funktioniert Super.
Besides a couple of minor typeos it works great.
@NeilWeicher gibt es einen Bearbeiten-button, so dass Sie beheben können diesen kleinen Tippfehler.InformationsquelleAutor Luke
Basierend auf Ihre Erwähnung von
.wav
werde ich glaube, du hast das schreiben von code für Windows (das scheint zu sein, wo*.wav
- Dateien sind am häufigsten). In diesem Fall verwenden SieFindFirstFile
undFindNextFile
zu durchqueren Verzeichnisse. Diese verwenden eineWIN32_FIND_DATA
Struktur, die ein MitglieddwFileAttributes
enthält flags, erzählt die Attribute der Datei. WenndwAttributes & FILE_ATTRIBUTE_DIRECTORY
ist nicht null, Sie haben den Namen eines Verzeichnisses.Diese Seite zeigt, wie Sie zu benutzen (in VB, aber die übersetzung nach C sollte mehr oder weniger gerade nach vorne): support.microsoft.com/kb/185476. Beachten Sie, dass Sie möchten vielleicht auch zu überlegen, wie Sie die hande NTFS junctions, d.h., ob Sie Folgen oder nicht, und wenn Sie das tun, wie, um Endlosschleifen zu vermeiden.
InformationsquelleAutor Jerry Coffin
Sehr Hilfreich.
Ich hatte sowieso einen stack overflow, da war es immer hinzufügen ".", um den Pfad und die Rückkehr zu den gleichen Pfad = Endlosschleife.
Hinzufügen das es gelöst:
//found a subdirectory; recurse into it
PathCombine(szFullPattern, lpFolder, FindFileData.cFileName);
FindFilesRecursively(szFullPattern, lpPattern);
if (FindFileData.cFileName[0] == '.') continue;
InformationsquelleAutor motiwert
opendir und readdir (auf unix), hier ein Beispiel:
http://opengroup.org/onlinepubs/007908775/xsh/readdir.html
oder FindFirstFile auf windows
können Sie auch die Schale ziemlich leicht:
InformationsquelleAutor jspcal
überprüfen Sie diese links
InformationsquelleAutor K Singh