verzeichnis auslesen und dateien nummerieren in c

hoernchen

hoernchen

UBERgarstiges nagetier
eventuell liegt es an der uhrzeit, aber google will mir nix verraten.

ich moechte ein verzeichnis (zb. das aktuelle) auslesen und die einzelnen dateien durchnummerieren. auslesen geht ja noch :

#include <sys/types.h>
#include <dirent.h>

int main(int argc, char **argv)
{
DIR *dirHandle;
struct dirent * dirEntry;

dirHandle = opendir(".");
if (dirHandle) {
while (0 != (dirEntry = readdir(dirHandle))) {
puts(dirEntry->d_name);
}
closedir(dirHandle);
}
}

die endgueltige ausgabe solte zb. so aussehen :

1) erste_datei
2) zweite_datei
etc.

wie ich die ausgabe von . und .. verhindere mag mir zwar gerade justament nicht einfallen, ist aber nicht so wichtig.
sinn des ganzen wird es, via ziffer eine datei auszusuchen, deren inhalt dann in eine variable uebergeben wird.

wenn es wie ich fuerchte zu trivial ist, reicht ein kurzes "such weiter du faules aas" oder ein tritt in den allerwertesten in die richtige richtung.
 
Hi, hab noch nie mit dirent gearbeitet, doch prinzipiell sehe ich zwei Moeglichkeiten:
a) Du legst alle Dateien in einem Array ab. Z.B. nur deren Namen, oder deren stream file descriptor (man dirfd). Dann laeufst Du mit einer einfache Laufvariablen durch das Array und gibst Zahl + Dateiname aus.
b) Du benutzt telldir: Beim ersten Oeffnen des Verzeichnisses gibt's ein telldir_begin, beim Durchlaufen ein telldir_current, und fuer die Ausgabe benutzt Du deren Differenz - vorausgesetzt, dass die Zeiger fortlaufend sind.

Ich wuerde wohl die erste Methode benutzen, denn wenn du mit den Dateien weiterarbeiten willst, musst Du ja ohnehin irgendwo eine Referenz drauf haben.
 
Code:
#include <sys/types.h>
#include <dirent.h>
#include <stdio.h>

int main(int argc, char **argv)
{
    int run = 1;
    char buffer[100];
    DIR *dirHandle;
    struct dirent * dirEntry;

    dirHandle = opendir(".");
    if (dirHandle) {
       while (0 != (dirEntry = readdir(dirHandle))) {
          printf("%d) %s\n", run, dirEntry->d_name);
          run ++;
       }
       closedir(dirHandle);
    }
}

da waere die ausgabe:
1) .
2) ..
3) dateiname
usw
fuegst du dann die while schleife noch so abaenderst:
Code:
    while (0 != (dirEntry = readdir(dirHandle))) {
        if(strcmp(dirEntry->d_name, ".") == 0 ||
           strcmp(dirEntry->d_name, "..") == 0){
            continue;
            }
        printf("%d) %s\n", run, dirEntry->d_name);
        run ++;
    }

dann wird der . und der .. nicht ausgegeben dann ist ausgabe:
1) dateiname
2) dateiname2

ich hoffe ich konnte dir helfen
mfg hazelnoot
 
Zuletzt bearbeitet:
danke vielmals fuer die antworten. ich werds in kuerze einbauen und brav berichten.

btw. find ich den zusammenhang der nicks genial :-))))
 

Ähnliche Themen

Durch das ganze Unix System bestimmte Dateiart suchen

Aus Datei lesen

Ndiswrapper

Zurück
Oben