Datei mit Kontrolle öffnen



  • Hi Leute,

    will ne Datei per Filepointer öffnen um zu sehen ob Sie vorhanden ist,
    denn falls nicht müsste mir ja fopen als Rückgabewert NULL liefern....

    also ich habe das ganze so probiert:

    #include <stdio.h>
    
    void main ()
    
    {
    	char i;
    	FILE *fp[4];
    
    	for(i=0;i<4;i++)
    	{
    		if((fp[i]=fopen("C:\\prog\\beleg2\\daten_[i].txt","r"))==NULL)
    
    			printf("\nDateioeffnungsfehler");
    
    	}
    
    }
    

    Leider klappt das nich! Wenn ich den pfad eindeutig eingebe also anstelle von daten_[i] einfach daten_1, daten_2 usw. eingebe da klappt alles wunderbar...!

    Hat jemand mal nen Tipp?

    Danke!



  • Also erstmal sieht es so aus, als hättest du einen Denkfehler begangen.
    Das

    i=0;i<4;
    

    sollte wohl eher

    i='0';i<'4';
    

    heißen.

    So, jetzt zu deiner Frage:
    Das liegt daran, dass deine Pfadangabe ein String-Literal ist. Das "i" ist hier einfach ein Buchstabe, und kein Variablenbezeichner.
    Du musst den String also aus einzelnen Bestandteilen zusammensetzen.
    Das geht am einfachsten mit einem stringstream:

    // dafür musst du sstream includen
    std::stringstream s;
    s << "C:\\prog\\beleg2\\daten_[" << i << "].txt";
    /*...*/ fopen(s.str(), "r") /*...*/
    

    Außerdem: da du hier im C++- und nicht im C-Forum postest, solltest du besser fstream statt FILE verwenden.



  • Wenn ich das verstehen würde dann würde es mir auch bestimmt helfen....;-)

    Gibt es eine möglichkeit es so zu machen wie ich es mir gedacht habe?

    Es sollen halt 4 Dateien geöffnet werden.

    Danke!



  • Hallo

    schau in die C++FAQ hier im Forum, Thread Dateien und Ströme

    bis bald
    akari



  • habe leider nichts passendes gefunden....

    habe mal den Code erweitert damit ihr sehen könnt in welche richtung das ganze gehen soll:

    void main ()
    
    {
    	char i,d=0;
    	int kdn;
    	FILE *fp[100];
    
    	for(i=0;i<4;i++)
    	{
    		if((fp[i]=fopen("c:\\prog\\beleg2\\daten_[i].txt","r"))==NULL)
    
    			printf("\nDateioeffnungsfehler");
    
    		else
    			printf("Datei_[i] vorhanden!");
    			d++;
    
    	}
    
    			printf("\nEs sind %d Dateien vorhanden",d);
    
    			printf("\nBitte geben Sie die Kundennummer ein die ueberprueft werden soll\n");
    			scanf("%s",&kdn);
    
    }
    

    Das kommische ist das er anstelle von Variable d einfach die i ausgibt...

    Hab echt ein plan, bitte um hilfe...!



  • Hallo

    wenn du wirklich auf dieser Seite nachgeschaut hättest, hättest du die Klasse std::ifstream gefunden, mit der in C++ Dateioperationen gemacht werden (im Gegensatz zu dem veralteten C-Style fopen).
    Und dort ist mit .is_open() auch die Methode gezeigt, mit der du das Öffnen überprüfen kannst.

    /Edit : Desweiteren must du natürlich auch die Hinweise zu std::stringstream beachten, um deinen Dateinamen korrekt zusammenzubauen.

    bis bald
    akari


Anmelden zum Antworten