f.open, aber welcher Modus?



  • wenn du dich in textdateien nur über den text organisieren willst dann kannst du zum beispiel nicht in irgendeine zeile springen, das müsstest du binär machen. Es gibt jedoch eine Möglichkeit. Du ließt die ganze datei in einen vector ein und suchst dort nach dem zu löschenden Benutzernamen.Und aus einem vector kannst du ihn ganz einfach mit erase rauslöschen 😉

    Hier eine Umfassende Referenz zu std::vector: http://www.cplusplus.com/reference/stl/vector/

    EDIT:

    Achja und nachdem du Vector bearbeitet hast, kannst du ihn einfach neu in die Datei schreiben und das alte überschreiben wenn es nicht mehr gebraucht wird.



  • EDIT:
    sorry für den doppelpost



  • Und wie soll das nachher aussehen wenn er 1Million Accounts hat? *fg*

    Aber da es sicher nur Übungszweck ist, ist die Lösung wohl die beste.



  • Wenn du Zeilen konstanter Länge verwendest, kannst du auch in die Zeile einer Textdatei springen und editieren.
    MfG
    hüü hüpf



  • @T0bi hmmm ich würde sagen dann hilft ihm nur noch eine Datenbank:) Aber ich glaube kaum das er eine Bankanwendung schreiben will die solche Ausmaße erreichen wird:)



  • Hallo @ all

    danke für die regen Antworten.

    Denke, ich werde mich nachher mal mit Firefighter´s Vorschlag auseinander setzen.

    Denke mal, die User-Höchstzahl wird max. 10 erreichen, da es sich um ein Abschluss Projekt für die HBFI handelt und so gesehen nur zu Demonstrationszwecken bei der Vorführung genutz wird.

    Gruß Yannik



  • yanfred schrieb:

    Hallo @ all
    [...]
    Denke mal, die User-Höchstzahl wird max. 10 erreichen
    [...]
    Gruß Yannik

    Immerhin, was machst du, wenn das auf nen Reczhner mit nur 8Mb Ram laufen soll *gg*

    Okok, spaß bei seite 🙂 für max. 10User musste ja net mal den STD Vector nehmen, da reicht auch locker nen stink normales array.

    Gruß Tobi.



  • falls irgendwann mal irgendwer das selbe / ähnliche problem haben sollte, hier die Lösung:

    void Del_User()
      	{
      		fstream f;
    		int i=0;
    		char LINE[1024];
    		char filename[] = "userliste",userToDel[50]="";
    
    	   strcpy(userToDel,benutzername.c_str());                                    //userToDel den Benutzernamen zuweisen
    
          //-----
    
          char user[50]="";
          char ordner[50]="";
          string usertemp,ordnertemp;
    
          usertemp=benutzername;
          usertemp.append(".usr");
          strcpy(user,usertemp.c_str());
          //---
          ordnertemp="rmdir /s /q ";
          ordnertemp.append(benutzername);
    		strcpy(ordner,ordnertemp.c_str());
    
          //-----
    
    		vector<char *> users;																		//Vector users als char* definieren
    		char *p;                                                                   //char *p definieren
    
    		f.open(filename, fstream::in);                                					//userliste zum lesen öffnen
    
    		if (f.good())																					//gegenteil von if(!f)
          	{
    				f.seekg(0L,ios::beg);                                                //Coursor zur ersten stelle der datei rücken
    				while (!f.eof())
                	{
    						f.getline(LINE,1024);			                                 //Zeile für Zeile aus Datei lesen, aus sicherheitgründen
    																											//(vermeiden eines Pufferüberlaufs) max. 1024 Zeichen pro zeile lesen.
    						if(strcmp(LINE,userToDel) == 0)                                //prüft, ob die gerade ausgelesene zeile mit userToDel überein stimmt.
    																											//wenn das der fall ist, überspringt er den rest und geht wieder zum schleifen anfang
                      	{
                         	continue;
                         }
                      if ( !(p=(char *)malloc( sizeof(char)*sizeof(LINE) )) )        //Wenn user nicht der gesuchte ist, Zwischenspeicher speichern.
             																								//Wenn es zu einem Pufferüberlauf kommt, Programmbeende!!!
                      	{
    								cout<<"\nSpeicher alloziierung fehlgeschlagen";
                            cout<<"\nProgramm muss beendet werden...!";
                            exit(0);
    							}
    						strncpy(p,LINE,sizeof(char)*sizeof(LINE));                     //user in den vektor legen
    						users.push_back(p);
    					}
    				f.close();                                                           //Datei schließen
    		  	}
    
    	   f.open(filename,fstream::out);															//userliste im schreibmodus öffnen
    		for (i=0;i<users.size();++i)
          	{
    				f<<users[i]<<endl;																	//Alle anderen User wieder eintragen
    			}
    	   f.close();																						//Datei wieder schließen
    
          remove(user);                                                              //Löscht UserDatei mit Passwort
    
    		system(ordner);																				//Löscht UserOrdner mit allen Dateien
    
    	}
    


  • Schreibt ihr eigentlich alle in Editoren die keine automatische Code-Formatierung unterstützen? Das ist ja schrecklich!

    MfG SideWinder



  • doch 😉

    nur wenn ich die tabs mit kopiere, zeit er sie anders an...

    kannst du ja gerne mal selbst probieren


Anmelden zum Antworten