(C) Dateien von Verzeichnissen unterscheiden
Hopsel
- sonstiges
Hi alle!
Ich möchte ein Verzeichnis inklusive Unterordnern ausgeben. Dabei kommen mir allerdings die im Verzeichnis enthaltenen Dateien in die Quere. Wie kann ich eine Datei von einem Verzeichnis unterscheiden?
#include <dir.h>
#include <stdio.h>
main(int argc,char* argv[]) {
struct dirent * dir_entry_p;
const char *verz = argv[1]; // ein Verzeichnispfad wird dem Programm als Argument mitgegeben
DIR * dir_p = opendir(verz);
while( NULL != (dir_entry_p = readdir(dir_p))) {
printf("%s\n", dir_entry_p->d_name); // Gibt Dateien und Ordner aus
// Wie kann ich Dateien von Ordnern unterscheiden?
}
closedir(dir_p);
return 0;
}
MfG H☼psel
Moin!
Ich möchte ein Verzeichnis inklusive Unterordnern ausgeben. Dabei kommen mir allerdings die im Verzeichnis enthaltenen Dateien in die Quere. Wie kann ich eine Datei von einem Verzeichnis unterscheiden?
Recht simpel: Finden den Dateityp heraus. Verzeichnisse haben einen anderen Typ, als normale Dateien - und zusätzlich gibts ja noch diverse andere Dateitypen wie Symbolische Links, Gerätedateien, Sockets etc.
- Sven Rautenberg
Hi Sven!
Recht simpel: Finden den Dateityp heraus.
Finde ich den in der Struktur dirent? Wenn ja, dann habe ich Tomaten auf den Augen.
MfG H☼psel
Hallo
Ich möchte ein Verzeichnis inklusive Unterordnern ausgeben. Dabei kommen mir allerdings die im Verzeichnis enthaltenen Dateien in die Quere. Wie kann ich eine Datei von einem Verzeichnis unterscheiden?
welches Betriebssystem?
Siehe dazu Attribute von Dateien und Arbeiten mit Verzeichnissen (nicht ANSI C).
main(int argc,char* argv[]) {
struct dirent * dir_entry_p;
const char *verz = argv[1];
Eine Anmerkung zu Deinem Stil:
Drei aufeinanderfolgende Zeilen, drei verschiedene Varianten für eine Zeigerdeklarierung. Da könntest Du Dich verbessern :-)
Freundliche Grüße
Vinzenz
Hallo Hopsel,
Ich möchte ein Verzeichnis inklusive Unterordnern ausgeben. Dabei kommen mir allerdings die im Verzeichnis enthaltenen Dateien in die Quere. Wie kann ich eine Datei von einem Verzeichnis unterscheiden?
In ANSI C ist das meines Wissens ncht standardisiert. Unter POSIX [1] musst Du stat() (oder vmtl. besser lstat()) aufrufen, dann bekommst Du den Dateityp (Datei, Verzeichnis, Socket, Symbolischer Link, blockorientiertes Gerät, zeichenorientiertes Gerät, FIFO) und noch eine ganze Menge anderer Informationen (z.B. Dateigröße, Datum der letzten Änderung, ...) heraus. Unter Windows musst Du etwas anderes verwenden, irgend einen Windows-API-Aufruf vermutlich. Unter nochmal anderen Betriebsystemen musst Du wieder etwas anderes verwenden.
Viele Grüße,
Christian
[1] Lies: Hinreichend POSIX-kompatible Betriebsysteme, wie die meisten UNIX-Derivate, darunter FreeBSD, Linux, Solaris, ...