Ersetzen Sie die Zeile in der txt-Datei c++
Ich Frage nur, weil ich eine text-Datei mit STATUS:USERID:PASSWORD in accounts.txt
Beispiel würde es so Aussehen:
OPEN:bob:askmehere:
ÖFFNEN:john:askmethere:
VERSCHLUSS:rob:robmypurse:
ich habe eine Benutzereingabe in meinem Haupt-als solcher kann der Benutzer login-3x anders-status ändert sich von OFFEN auf SCHLOSS
Beispiel nach 3 versucht der john
vor:
OPEN:bob:askmehere:
ÖFFNEN:john:askmethere:
VERSCHLUSS:rob:robmypurse:
nach:
OPEN:bob:askmehere:
VERSCHLUSS:john:askmethere:
VERSCHLUSS:rob:robmypurse:
was ich gemacht habe, ist:
void lockUser(Accounts& in){
//Accounts class consist 3 attributes (string userid, string pass, status)
ofstream oFile;
fstream iFile;
string openFile="accounts.txt";
string status, userid, garbage;
Accounts toupdate;
oFile.open(openFile);
iFile.open(openFile);
while(!iFile.eof()){
getline(iFile, status, ':');
getline(iFile, userid, ':');
getline(iFile, garbage, '\n');
if(userid == in.getUserId()){
toupdate.setUserId(in.getuserId());
toupdate.setPassword(in.getPassword());
toupdate.setStatus("LOCK");
break;
}
//here i should update the account.txt how do i do that?
ofile.open(openFile);
ofile<<toupdate.getStatus()<<":"<<toupdate.getUserId()":"<<toupdate.getPassword()<<":"<<endl;
}
- Entweder Lesen Sie die gesamte Datei, und ersetzen Sie die passenden Worte in Erinnerung, oder setzen Sie den cursor in die Datei an der richtigen Stelle, und ersetzen Sie das Wort.
- Nicht
while (!iFile.eof())
es sei denn, weil du vorsichtig bist, wird es nicht so funktionieren wie Sie es erwarten. Der Grund dafür ist, dass dieeofbit
flag nicht gesetzt ist, bis Sie versuchen, zu Lesen über die Datei, führt die Schleife zu iterieren, einmal für viele. Statt z.B.while (std::getline(...))
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwendung mit ReadLine und finden Sie die Zeile, die Sie wollen, zu ersetzen, und verwenden ersetzen ersetzen Sie das, was Sie wollen, zu ersetzen. Zum Beispiel schreiben:
ODER
Gibt es zwei gängige Möglichkeiten, zu ersetzen oder anderweitig zu ändern, eine Datei. Der erste und der "klassische" Weg ist, die Datei zu Lesen, Zeile für Zeile, überprüfen Sie die Zeile(N), die modifiziert werden soll, und schreiben Sie eine temporäre - Datei. Wenn Sie erreichen das Ende der Eingabe-Datei, die Sie schließen und umbenennen der temporären Datei als input-Datei.
Die andere häufige Möglichkeit ist, wenn die Datei relativ klein ist, oder Sie haben viel Speicher, ist zu Lesen, das alles in Erinnerung, tun die Modifikation benötigt, und schreiben Sie dann den Inhalt des Speichers in die Datei. Wie, um es zu speichern in Speicher können unterschiedlich sein, wie ein Vektor, der die Zeilen aus der Datei, oder ein Vektor (oder andere Puffer), die alle Zeichen aus der Datei, ohne Trennung.
Ihre Implementierung ist fehlerhaft, weil Sie die Ausgabe-Datei (die die gleiche wie die input-Datei) innerhalb der Schleife. Das erste problem mit diesem ist, dass das Betriebssystem kann nicht zulassen, dass Sie zum öffnen einer Datei für das schreiben, wenn Sie bereits zum Lesen geöffnet ist, und wie Sie nicht überprüfen Sie für Fehler, die aus dem öffnen der Dateien, die Sie nicht wissen, über diese. Ein weiteres problem ist, wenn das Betriebssystem es zulässt, dann wird dein Anruf zu
open
werden kürzen der vorhandenen Datei, was Sie alles zu verlieren, aber die erste Zeile.Einfache pseudo-ish-code, um zu erklären,