[c] Dateien von Verzeichnissen unterscheiden

Xong

Grünschnabel
Hallo liebe Helfer,
wie kann ich unter Windows XP feststellen, ob ein Verzeichniseintrag ein weiteres Verzeichnis oder eine Datei ist?

Folgender Code funktioniert dummerweise nicht! Die Funktion stat belegt die Struktur attribut nicht mit Werten.
Code:
#include <stdio.h>
#include <stdlib.h>
#include <dir.h>
#include "dirent.h"
#include <string.h>
#ifdef __unix__
      #include <unistd.h>
      #include <sys/stat.h>
      #include <sys/types.h>
#else
      #include <sys\stat.h>
#endif

int main() {
   struct stat attribut;
   attribut.st_mode = 1234; // Wird die 1234 überschrieben werden?
   struct dirent * dir_entry_p;
   DIR * dir_p = opendir("C:\\");
while( NULL != (dir_entry_p = readdir(dir_p))) {
    stat(dir_entry_p->d_name, &attribut); /* Sollte eigentlich die Struktur
                                             attribut mit Werten füllen. */
    printf("%d\n\n", attribut.st_mode); // Ausgabe: 1234 !! Wert wurde also nicht belegt.
}
 closedir(dir_p);
 return 0;
}

attribut.st_mode würde ich dann mit S_IFDIR &-verknüpfen. Aber das funktioniert ja im Moment leider nicht.

Danke für jede Hilfe
Xong
 
Hi.

Erstmal solltest du immer den Rückgabewert der Funktionen prüfen die du aufrufst um herauszufinden ob ein Fehler aufgetreten ist:
C:
if (stat(dir_entry_p->d_name, &attribut) != 0) {
  perror("stat");
}

Kann es sein, das du das Programm nicht im Verzeichnis C:\ aufrufst? Dann findet stat natürlich auch die Dateien nicht.

Gruß
 
deepthroat hat gesagt.:
Erstmal solltest du immer den Rückgabewert der Funktionen prüfen die du aufrufst um herauszufinden ob ein Fehler aufgetreten ist.
Das hätte ich tun sollen. :rolleyes:

deepthroat hat gesagt.:
Kann es sein, das du das Programm nicht im Verzeichnis C:\ aufrufst? Dann findet stat natürlich auch die Dateien nicht.
Genau das war das Problem. Allerdings soll das Programm ja auch von jedem Pfad aus laufen. Doch das Problem habe ich gelöst.

Danke für deine schnelle Hilfe,
Xong
 
Zurück