72 Stimmen

Wie erhält man einen Verzeichniseintrag in C?

Wie durchsucht man ein Verzeichnis nach Ordnern und Dateien in C? Es muss plattformübergreifend sein.

6voto

PW. Punkte 3727

Opendir/readdir sind POSIX. Wenn POSIX nicht ausreicht, um die gewünschte Portabilität zu erreichen, prüfen Sie Apache Portable Runtime

2voto

Pascal Punkte 4095

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.

2voto

user541686 Punkte 196656

Die meisten ähnlich Methode zu readdir verwendet wahrscheinlich die wenig bekannte _find Funktionsfamilie .

1voto

Howard Wu Punkte 11

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;
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X