Strings und Dateien
-
Ich hab bei der Implementierung meines Hilfesystems ein paar kleinere und ein größeres Problem:
1. Wie kann man eine einfache Textdatei umbenennen?
2. Wie kann man eine Datei löschen?3.in folgendem Programmcode hab ich folgendes Problem: Ich will aus einer Textdatei, die die Themenübersicht aller Hilfeseiten enthält, eine Zeile entfernen, weil ein Hilfetext gelöscht wurde. Also kopiere ich zeilenweise
in eine neue Datei (außer, wenn die Zeile der Quelldatei mit der zu löschenden Zeile übereinstimmt). Dummer Weise kopiert er die aber immer mit und ich weiß nicht warum.
später müsste ich ja nur noch die alte Datei löschen und die neue umbenennen, womit wir wieder bei Problem 1 u. 2 wären.void main(){ int themennr; int anzlines=0; int themenindex=1; string line; ifstream is(themendatei); ofstream os("tempHilfe1.txt"); showContent(); cout << "Nummer des zu entfernenden Themas: "; cin >> themennr; while (!is.eof()){ if (anzlines!=themennr){ getline(is, line); os << "[" << themenindex << "] " << line.substr(4, 80) << endl; themenindex++; }else{ //char datei[80]; string dateiname=line.substr(4, 80); cin.sync(); cout << dateiname << endl; // Datei löschen -> string in char umwandeln } anzlines++; } if (themennr>anzlines){ //angelegte Datei wieder löschen //menue(); }else{ //alte ThemenDatei löschen und angelegte umbenennen } }
-
Zu 1.:
Mit std::rename, wie jede andere Datei auch.Zu 2.:
Mit std::remove.Zu 3.:
Du überspringst nicht nur das Schreiben in die neue Datei, sondern auch das Lesen aus der alten, wenn du an der zu entfernenden Zeile angekommen ist. Nicht besonders sinnvollP.S.:
Such mal nach eof und getline.P.P.S.:
int main
-
Danke, das bringt mich weiter.
verlangt remove auch einen const* char, wie z.B. beim Öffnen einer Datei mit ofstream os(<Dateiname>?
Da hab ich nämlich immer das Problem, dass das casten von string in char nicht klappt.weiß vielleicht auch jemand, wie man am besten eine Textdatei nach einem Wort durchsucht? Wenn ich das mit getline mache, besteht ja die Gefahr, dass ich Wörter zerstückle und dann vielleicht ein falsches Ergebnis erhalte, oder? Zur Not muss ich eben Zeichenweise vergleichen.
Existiert überhaupt ne Funktion, mit der ich prüfen kann, ob ein String in einem anderen enthalten ist?
-
Gordon schrieb:
verlangt remove auch einen const* char, wie z.B. beim Öffnen einer Datei mit ofstream os(<Dateiname>?
Da hab ich nämlich immer das Problem, dass das casten von string in char nicht klappt.Da brauchst du gar nicht zu casten, dafür hat std::string eine Methode: std::string::c_str()
weiß vielleicht auch jemand, wie man am besten eine Textdatei nach einem Wort durchsucht? Wenn ich das mit getline mache, besteht ja die Gefahr, dass ich Wörter zerstückle und dann vielleicht ein falsches Ergebnis erhalte, oder? Zur Not muss ich eben Zeichenweise vergleichen.
Zum Suchen solltest du gar nicht zeilenweise, sondern blockweise einlesen. Lies einen Block ein, der mindestens so groß ist wie der Suchstring, und benutze immer zwei aufeinanderfolgende Blöcke zum Suchen, d.h. zuerst suchst du in Block 1 + 2, dann in Block 2 + 3 usw.
Existiert überhaupt ne Funktion, mit der ich prüfen kann, ob ein String in einem anderen enthalten ist?
std::string::find()