Alles Dateien eines Ordners nacheinander einlesen



  • Guten Abend,

    zuerst Mal muss ich euch ein großes Lob aussprechen... und zwar allen die zu diesem Forum beitragen und die durch ihren Einsatz vielen verzweifelten Leute schon geholfen haben... so auch mir 🙂
    Vielleicht habt ihr meine anderen thread schon gelesen, wo es darum ging txt-Datein einzulesen. Das klappt mitlerweile sehr gut. Und deswegen würde ich meine Aufgabe gerne weiter automatisieren.
    Mein Problem stellt sich folgendermaßen da:
    Ich habe einen Ordner mit ca. 25 Dateien drin. Die heißen alle ähnlich, unterscheiden sich nur durch eine angehängte Ziffer z.B.: Datei1.txt, Datei2.txt, Datei3.txt usw...

    Mein Plan sieht folgendermaßen aus.
    Ich wollte eine große Schleife um mein bisheriges Programm legen und den Dateinamen der einzulesenden Datei in einer Variablen an "fopen" übergeben.
    nicht

    fp=fopen("Datei1.txt","r");
    

    sondern

    fp=fopen(Variable,"r");
    

    Nur leider klappt das nicht wie erhofft. Vielleicht stell ich mir das auch zu einfach vor.
    Daher möchte ich gerne nochmal eure hilfe in anspruch nehmen. Also wenn ihr ne Idee habt wie man soetwas realisieren kann, wäre ich euch sehr dankbar.

    Vielen Dank schonmal und schönen Abend noch!
    Gruß
    Maddin



  • ANSI, in its wisdom, weiss nicht, wie man Verzeichnisse auflistet. Aber wenn du dir irgendwo merkst, welche Zahl die letzte Datei hat, brauchst du das auch gar nicht. Das könnte dann so gehen:

    int i, letze_zahl = 25;
    char buf[MAXPATH];
    FILE *fp;
    
    for (i = 1; i <= letzte_zahl; i++) {
        sprintf(buf, "Datei%d.txt", i);
        fp = fopen(buf, "r");
        /* Datei ist offen */
        fclose(fp);
    }
    

    Wenn du die Namen nicht anhand der Zahlen konstruieren kannst, wirst du wohl beim Betriebssystem nachfragen müssen.

    Nur leider klappt das nicht wie erhofft. Vielleicht stell ich mir das auch zu einfach vor.

    Du könntest fairerweise schon verraten, was da nicht klappt. 🙂



  • µngbd schrieb:

    ANSI, in its wisdom, weiss nicht, wie man Verzeichnisse auflistet.

    vielleicht haben sie's auch einfach vergessen.
    🙂



  • Moin, moin,

    Vielen Dank für die rasche Antwort. Und klar, ich sollte das Problem schon richtig benennen. Also folgende Fehlermeldung:
    Dazu muss ich sagen, dass ich um es auszuprobieren, nur den Dateinamen in eine Variable schreiben wollte.

    char datei[135];
    datei="Datei1.txt";
    FILE *fp;
    fp=fopen(datei,"r");
    

    Dabei erscheint in Zeile 2 des Beispiels folgende Fehlermeldung:
    "operands of = have illegal types 'array 135 of char' and 'pointer to char' "
    Die 135 habe ich genommen, weil die Dateinamen eigentlich komplizierter sind und bis zu 135 Zeichen haben können 😉

    Den Code probiere ich gleich nochmal aus und meld mich dann nochmal...
    Danke!
    Gruß
    Maddin



  • So,
    ich habe den Code ausprobiert leider scheint mein Compiler den Begriffe "MAXPATH" nicht zu kennen. Wenn ich das aber gegen eine Zahl austausche, funktioniert es einwandfrei. Die Zahl bzw. "MAXPATH" soll doch den reservierten Speicher für die Variable angeben oder habe ich das falsch verstanden?

    Ich verwende

    #include <conio.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    

    Vielleicht liegt es ja auch daran???



  • MS@GL schrieb:

    char datei[] = "Datei1.txt";
    FILE *fp;
    fp=fopen(datei,"r");
    

    Probier' das mal aus, bin mir aber nicht ganz sicher, daß das tut. fopen erwartet const char* für beide Argumente.
    Eine Dir- Funktion ist auf die OS- API angewiesen, für Windoof kannst Du hier mal Kiebitzen: Directory listing (C, Windows).
    In Turbo C gab's mal findfirst und findnext, aber Standard ist das nicht. 😞


Anmelden zum Antworten