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ß YannikImmerhin, 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