moin,
Bin für jeden Tipp dankbar.
unter Windows gibts Laufwerke und die haben Buchstaben. a: und b: fallen schonmal weg, also hast Du nur noch c: bis z: zu prüfen.
Ansonsten schau dir mal die Libs
#include <sys/types.h>
#include <sys/stat.h>
#include <ftw.h>
#include <dirent.h>
an, die kenne ich zumindest von c her. ftw ist das Herzstück:
/*
Wie dem auch sei, im Gegensatz zu vielen anderen Büchern, will ich hier nicht den üblichen Weg vorstellen, sondern die Funktion ftw(). Hier die Syntax von ftw():
#include <ftw.h>
int ftw( const char *dir,
int (*fn)(const char *file, const struct stat *sb,
int flag), int nopenfd );
Mit dieser Funktion beginnen Sie mit dem Durchforsten eines kompletten Verzeichnisbaums, angefangen bei dir. Für jeden gefundenen Eintrag im Verzeichnis dir (und allen Unterverzeichnissen) wird die Funktion fn() mit dem kompletten Pfadnamen, einem Zeiger auf die Struktur stat (siehe Kapitel 3) und einem Flag, welches folgenden Wert haben kann:
* FTW_F – Eintrag ist eine normale Datei.
* FTW_D – Eintrag ist ein Verzeichnis.
* FTW_DNR – Eintrag ist ein nicht lesbares Verzeichnis (meist mangelnde Zugriffsrechte).
* FTW_SL – Eintrag ist ein symbolischer Link.
* FTW_NS – Fehler bei stat, obwohl der Eintrag kein symbolischer Link ist.
Damit die Funktion ftw() nicht alle für einen Prozess vorhandenen Filedeskriptoren für die offenen Verzeichnisse verwendet, können Sie mit dem Argument nopenfd die maximale Anzahl gleichzeitig geöffneter Verzeichnisse angeben. Sobald die Suchtiefe dann höher ist als nopenfd, bremst ftw() ein, da es einige Verzeichnisse schließt, um neue zu ändern. Diese müssen hinterher wieder geöffnet werden, um an der Stelle, an der ftw() aufgehört an, weiterzumachen.
Die Funktion ftw() können Sie stoppen, indem Sie bei der Funktion fn() einen Wert ungleich 0 zurückgeben. 0 heißt weitermachen und ungleich 0 stopp. Ansonsten macht ftw() so lange weiter, bis alle Verzeichnisse und deren Einträge durchgeforstet sind. Tritt ein Fehler auf, wird -1 zurückgegeben.
In dem folgenden Listing soll ein komplettes Verzeichnis mitsamt seinen Unterverzeichnissen ausgegeben werden. Es werden dabei alle Einträge angezeigt. Das Programm wurde mit Absicht relativ einfach und kurz gehalten. Tritt bspw. das Flag FTW_F in Erscheinung, sollten Sie die Strukturvariable st_mode von stat abfragen, ob es sich denn um eine normale Datei (S_IFREG), eine zeichenorientierte Gerätedatei (S_IFCHR), eine blockorientierte Gerätedatei (S_IFBLK), ein FIFO (S_IFIFO), einen symbolischen Link (S_IFLNK) oder ein Socket (S_IFSOCK) handelt. Natürlich können Sie auch weitere Attribute der einzelnen Einträge von der Struktur stat abfragen. Mehr zu stat im nächsten Kapitel. Hier das komplette Listing:
*/
Frag mich nicht, wo ich das her hab ;)
Hotte
Ein Passagier kotzt in die Tüte. Alles Nudeln, meine Güte!