Zum Inhalt springen

Seltsame Ausgabe bei readdir() unter C


Kadaj

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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
Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

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