Hopsel: (C) Dateien von Verzeichnissen unterscheiden

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

--
"It's amazing I won. I was running against peace, prosperity, and incumbency."
George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
  1. 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

    --
    My sssignature, my preciousssss!
    1. 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

      --
      "It's amazing I won. I was running against peace, prosperity, and incumbency."
      George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
      Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
  2. 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

  3. 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, ...

    --
    "I have always wished for my computer to be as easy to use as my telephone; my wish has come true because I can no longer figure out how to use my telephone." - Bjarne Stroustrup