Kadaj Geschrieben 23. Oktober 2011 Teilen Geschrieben 23. Oktober 2011 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 23. Oktober 2011 Teilen Geschrieben 23. Oktober 2011 (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 24. Oktober 2011 von Klotzkopp Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Kadaj Geschrieben 27. Oktober 2011 Autor Teilen Geschrieben 27. Oktober 2011 (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 27. Oktober 2011 von Kadaj Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.