Zum Inhalt springen

Seltsame Ausgabe bei readdir() unter C


Empfohlene Beiträge

Geschrieben

Hallo Leute,

ich bastle grad ein einem kleinen Programm. Zunächst möchte ich erstmal, dass das Programm den Inhalt des Ordners, den ich als Parameter übergebe, ausgibt. Das funktioniert auch soweit, nur, dass immer noch "." und ".." mit ausgegeben werden und ich hab keine Ahnung woher das kommt. Hier erstmal das Programm:


#include <stdio.h>

#include <sys/types.h>

#include <dirent.h>

#include <errno.h>

#include <stdlib.h>


int i = 0;

int lang = 0;

char test;

char name;


int main(int zahl, char *para[1])

{


        DIR *verzeichnis;

        struct dirent *eintrag;

        verzeichnis = opendir(para[1]);


if(zahl != 2) //wurde genau 1 parameter übergeben? 

{

        printf("Fehler bei der Parameteruebergabe.\n");

        printf("Es muss genau ein Parameter uebergeben werden!\n");

        printf("Die Syntax lautet: `./parameter /ordner/ordner/.../ordner`\n");

        return 0;

}


while((eintrag = readdir(verzeichnis)) != NULL)

{


if(eintrag->d_name != "."/* || eintrag->d_name != ".."*/)

{

        printf("%s\t", eintrag->d_name);

        i++;

//      lang += stringlength(eintrag->d_name);

//      printf("Laenge: %d \n",lang);

}


}

printf("\n%d Einträge gefunden\n",i);


//printf("Die Laenge ist: %d\n",lang);


//printf("Der Name, also d_name ist: %s \n",name);


return 0;

}
und das hier ist die Ausgabe, wenn ich das Programm aufrufe:
root@kadaj-ubuntu:/home/kadaj/Dokumente/c# ./parameter /home

.	..	kadaj	

3 Einträge gefunden

Die Einträge lässen sich auch nicht mit einer if-Anweisung abfangen, aber möglicherweise kann ich es nicht so vergleichen, wie ich es im Quellcode versucht habe. Viel mehr würde mich interessieren, warum die Punkte mit ausgegeben werden. Kann mir jemand helfen?

Vielen Dank

Geschrieben (bearbeitet)

Der einzelne Punkt steht für das Verzeichnis selbst, zwei Punkte sind das übergeordnete Verzeichnis.

Dein Vergleich funktioniert so nicht, weil du bei Arrays mit == und != immer nur die Anfangsadressen vergleichst. Benutz strcmp.

Bearbeitet von Klotzkopp
Geschrieben (bearbeitet)

Stimmt, das leuchtet irgendwie ein, vielen Dank.

Ich hab dafür nochmal ein anderes Programm geschrieben, funktioniert super, danke :beagolisc

#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <dirent.h>
#include <sys/types.h>
#include <stdlib.h>

int i = 0;

int main(int anzahl, char *para[1])
{

DIR *verzeichnis;
struct dirent *eintrag;
verzeichnis = opendir(para[1]);

if(anzahl != 2)
{
printf("Syntaxfehler:\n");
return 0;
}

while((eintrag = readdir(verzeichnis)) != NULL)
{
if(strcmp(eintrag->d_name, "..") != 0 && strcmp(eintrag->d_name, ".") != 0)
{
printf("name: %s \n",eintrag->d_name);
i++;
//printf("vergleich der zeichenkette mit '..': %d\n\n",strcmp(eintrag->d_name, ".."));
}
}

printf("%d Einträge gefunden",i);

return 0;
}
[/PHP]

Bearbeitet von Kadaj

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...