habe dringendes Problem bei E/A Funktionen!



  • erstmal mein prog:

    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <unistd.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <string>
    #include<iostream>
    #include<errno.h>
    #include<fcntl.h>
    #include<sys/stat.h>
    
    using namespace std;
    
    class kontaktlist
    {
    public:
    char *puffer;
    
    	kontaktlist(char* begin,char *neu) {
    		readlist(begin);
     		cout<<"Fehler"<<endl;
         		writelist(begin,neu);
    	}
    
    	void readlist (char *begin){
    	        string end=".c";
    	        string all = begin + end;
    	  	char *next = &all.at(0);
    	    	  cout<<next<<endl;
    	  	FILE *pfile = fopen(next,"a+");
    			if(pfile==NULL)
    			{
    		   	   	cout<<"Error: "<<strerror(errno)<<endl;
    		   	}else{
    	  	   	   fseek(pfile,0,SEEK_END);
    	  	   	   int size = ftell(pfile);
    	  	   	   rewind(pfile);
    		     		cout<<size<<endl;
    	  	   	   fread(puffer,1,size,pfile);
    	  	  	   puffer[size] = '\0';
    	    	     		cout<<"Datei "<<next<<" gelesen"<<endl;
                	     		cout<<puffer<<endl;
    		   	   	cout<<"HUHU"<<endl;
    		   	   	fflush(pfile);
    			}
    			fclose(pfile);
    	}
    
    	void writelist(char *begin_w,string neu){
    	    string end_w =".c";
    	    string all_w = begin_w + end_w;
    	    char *next_w = &all_w.at(0);
    
    	       cout<<next_w<<endl;
    	    FILE *pfile_w = fopen(next_w,"a+");
    		if(pfile_w==NULL)
    		{
    	              cout<<"Error: "<<strerror(errno)<<endl; 
    	            fclose(pfile_w);
    		}else{
    		    fseek(pfile_w,0,SEEK_END);
     	            int size_w = ftell(pfile_w);
    		    rewind(pfile_w);
    		    neu= neu + ';';
    		    char *neu_w = &neu.at(0);
    	  	    fwrite(neu_w,1,size_w,pfile_w);
    		      cout<<"Datei "<<next_w<<" neugeschrieben"<<endl;
    		      cout<<neu_w<<endl;
    		    fclose(pfile_w);
    		}
    	}
    };
     int main(){
        kontaktlist test("marko","buh");
        return 0;
     }
    

    eine besonderes augenmerk dabei auf writelist:
    die Methode bekommt einen string (als char zeiger) wo der Dateiname steht und einen wo der neue Inhalt steht.
    er hängt an Dateinamen das Dateiformat an und öffnet diese.
    dann hängt er an dem Inhalt ,der hinzukommen soll ein ; ran und schreibt das in die Datei (und hängt es an dem vorherigen Inhalt an). Dann schließt das Programm.
    Nun habe ich folgendes Problenm: wenn die Datei leer ist in die Writelist was reinschreiben soll, weigert er sich. Wie ist dieses Problem zu lösen?
    ps: es soll unter Linux laufen undFile zeiger benutzen!

    thx schonmal für help



  • Mein Tip - lasse das char*-Kuddelmuddel bleiben und verwende stattdessen durchgehend strings.

    Ansonsten: Was für eine Fehlermeldung spuckt denn der strerror()-Aufruf aus?

    PS: Und dein Gegurke in der Datei sieht auch grausam aus. Schau dir doch einfach mal die Parameter der Funktion man: fwrite() an.


Anmelden zum Antworten