Wie durchsucht man ein Verzeichnis nach Ordnern und Dateien in C? Es muss plattformübergreifend sein.
Antworten
Zu viele Anzeigen?Opendir/readdir sind POSIX. Wenn POSIX nicht ausreicht, um die gewünschte Portabilität zu erreichen, prüfen Sie Apache Portable Runtime
Die Auflistung der Verzeichnisse ist je nach Betriebssystem/Plattform sehr unterschiedlich. Dies liegt daran, dass verschiedene Betriebssysteme ihre eigenen internen Systemaufrufe verwenden, um dies zu erreichen.
Eine Lösung für dieses Problem wäre, eine Bibliothek zu suchen, die dieses Problem maskiert und portabel ist. Leider gibt es keine Lösung, die auf allen Plattformen einwandfrei funktioniert.
Auf POSIX-kompatiblen Systemen können Sie die Bibliothek verwenden, um dies zu erreichen, indem Sie den von Clayton geposteten Code verwenden (der ursprünglich aus dem Buch Advanced Programming under UNIX von W. Richard Stevens referenziert wird). Diese Lösung funktioniert unter *NIX-Systemen und würde auch unter Windows funktionieren, wenn Sie Cygwin installiert haben.
Alternativ könnten Sie einen Code schreiben, der das zugrundeliegende Betriebssystem erkennt und dann die entsprechende Verzeichnisauflistungsfunktion aufruft, die die "richtige" Art der Auflistung der Verzeichnisstruktur unter diesem Betriebssystem enthält.
Die meisten ähnlich Methode zu readdir
verwendet wahrscheinlich die wenig bekannte _find
Funktionsfamilie .
Den Beispielcode finden Sie auf der Website wikibooks link
/**************************************************************
* A simpler and shorter implementation of ls(1)
* ls(1) is very similar to the DIR command on DOS and Windows.
**************************************************************/
#include <stdio.h>
#include <dirent.h>
int listdir(const char *path)
{
struct dirent *entry;
DIR *dp;
dp = opendir(path);
if (dp == NULL)
{
perror("opendir");
return -1;
}
while((entry = readdir(dp)))
puts(entry->d_name);
closedir(dp);
return 0;
}
int main(int argc, char **argv) {
int counter = 1;
if (argc == 1)
listdir(".");
while (++counter <= argc) {
printf("\nListing %s...\n", argv[counter-1]);
listdir(argv[counter-1]);
}
return 0;
}
- See previous answers
- Weitere Antworten anzeigen