Auslesen geht nicht...



  • Hallo,
    das Auslesen klappt hier nicht ganz.
    Ich bekomme nur ein Zeichen ausgegeben.
    Bitte keine Kommentare über den Sinn dieses Quellcodes 🙂
    datei.h

    #ifndef datei_h
    #define datei_h datei_h
    #endif
    
    class datei
    {
    	private:
    		char *lesen;
    
    	public:
    		datei();
    		~datei();
    		char read_file(char *);
    
    };
    

    datei.cpp
    Warum FILE hier nur Gloabl geht weiß ich nicht

    #include "datei.h"
    #include <iostream>
    using namespace std;
    
    FILE *file;
    
    datei::datei()
    {
    	lesen=new char[1];
    
    }
    datei::~datei()
    {
    //	delete[] lesen;
    	fclose(file);
    }
    
    char datei::read_file(char *openfilename)
    {
    
    	file=fopen(openfilename,"r+");
    	if(file==NULL)
    	{
    		cout << "\nFehler!\n";
    	}
    	else
    	{
    
    		cout << "\n\n";
    		fread(&lesen,sizeof(*lesen),1,file);
    		while(!feof(file))
    		{
    			return *lesen;
    			fread(&lesen,sizeof(*lesen),1,file);
    			if(feof(file))
    			{
    				cout << "\n\n";
    			}
    
    		}
    	}
    
    }
    

    dateimain.cpp

    #include "datei.h"
    #include <iostream>
    using namespace std;
    
    int main()
    {
    	char *name=new char[11];
    	datei *pObjdatei;
    	pObjdatei=new datei;
    	cout << "Dateiname: ";
    	cin >> name;
    
    	cout << pObjdatei->read_file(name);
    
    	delete (pObjdatei);
    
    	return 0;
    }
    

    Bekomme nur ein Zeichen gezeigt und dann ist es nicht
    ein Buchstabe. Hatte mal funktioniert das ich statt des
    Zeichens den Buchstaben hatte, weiß aber nicht mehr wie.
    Hauptproblem bleibt aber das nur ein Zeichen ausgegeben wird
    obwohl die Funktion doch alles auslesen müßte.
    Habe dann probiert

    fread(&lesen,sizeof(*lesen),1,file);
    while(!feof(file))
    {
        return *lesen;
        delete[] lesen;
        lesen=new char[1];
        if(feof(file))
        {
            cout << "\n\n";
        }
    }
    

    Folge ist ein Programmabsturz.
    Wenn ich im destruktor delete[] lesen aufrufe stürzt es ebenfalls
    ab.

    Kann mir bitte jemand weiterhelfen ?



  • Benutze statt fopen und fclose doch lieber die C++ Funktionen der fstream klasse:
    FAQ: http://www.c-plusplus.net/forum/viewtopic.php?t=39469

    MfG Max



  • Hallo,
    mit fstreams habe ich das gleiche problem.
    [cpp]
    while(quelle.get(ch))
    {
    return *ch;
    }
    [cpp]
    Bei dieser Variante habe ich das selbe Problem.
    Deswegen hatte ich es mit fopen probiert



  • fread(&lesen,sizeof(*lesen),1,file);
    

    Warum übergibst du hier die Adresse von lesen? lesen ist doch schon ein Pointer.



  • Ich habs noch nicht anders probiert.
    Hmm.. ist das Syntaktisch falsch ?
    Ich dacht immer wenn das & vor nem Pointer
    steht wird die Adresse ausgegeben, deswegen das &
    Allerdings bin ich mit mit dem sizeof nicht klar ob
    das hinhaut. Habe mir mal sizeof ausgeben lassen.
    Es kam 1 raus. char ist ja 1 byte groß aber doch auch nur
    bei einem Zeichen, oder?


Anmelden zum Antworten