fileinhalt löschen
-
Hallo,
ich öffne eine Datei und starte eine for-Schleife. In dieser for-Schleife wird die Datei verändert (Zeile gelöscht und eingetragen).
Wie kann ich nun bei einer geöffneten Datei r+ den Dateinihalt löschen, ohne die Datei zu schliessen und mit Option "w" zu öffnen.z.B.
Zeile 18 soll gelöscht werden.
In der Datei stehen 20 Zeilen. Ich lese alle Zeilen, bis auf 18 ein. Dann sollte der Dateiinhalt gelöscht sein um meinen Buffer zu übertragen (ohne Zeile 18)Vielleicht stehe ich nur auf der Leitung, aber ich weiß nichgt wie ich das lösen kann. Das ständige öffnen und schliessen wollte ich ja verhindern.
Danke
worst_case
-
ich würd einfach das ganze file einlesen -> bearbeiten(löschen etc ist ja in nem string einfach) -> alles wieder schreiben
-
Hallo,
ist das nicht so das wenn ich vorher 20 Zeilen hatte und ich 10 Zeilen schreibe, das dann nur die ersten 10 zeilen überschrieben werden und der Rest gleich bleibt ?
worst_case
[ Dieser Beitrag wurde am 19.04.2003 um 19:30 Uhr von worst_case editiert. ]
-
einerseits hat das nichts mit den zeilen zu tun sondern nur mit der anzahl zeichen. wenn man eine schon existiernde datei mit "w" öffnet wird sie gelöscht... also sollte das kein problem sein
mfg japro
[ Dieser Beitrag wurde am 19.04.2003 um 20:42 Uhr von japro editiert. ]
-
Ich würde alles bis auf Zeile 18 in ein char array einlesen. Am bessten dynamisch erzeugen. Und dann die Datei löschen und eine neue erstellen
(nimm: w+). So und dann einfach wieder reinschreiben. Ist umständlich, aber glaub gibt kaum ne bessere Lösung, mit der man sich den Kopier Akt sparen kann oder?
-
long _filelength( int handle ); int _chsize( int handle, long size );
Du kannst auch einfach die größe der Datei verändern. Wenn Du weist, wie viele Zeichen Du neu geschreiben hast, führst Du einfach die Funktion _chsize aus und schwupp ist die Datei kleiner. (Dann brauchst Du keine neue zu erstelle).
:o Vorischt, ich weis nicht, ob das eine MSVC++ spezifische Funktion ist, oder ob das ANSI C ist :o
CIAO
Psyco
-
Hallo,
danke für die Antworten.
Die Datei mit w+ öffnen will ich ja nicht, wie schon oben beschrieben.
Ich habe eine Schleife in der die Datei einmal oder mehrmals bearbeitet wird.
Deshalb habe vor der Schleife die Datei mit r+ geöffnet und will die Datei erst nach der Schleife schliessen.
Meine Bearbeitung löscht Zeilen bzw. fügt Zeilen hinzu. Dies geschieht aber nicht in einem Satz sondern je nach Bedingung mehrmals hintereinander.Es muss doch eine Performence-schondende Lösung geben, ohne die Datei z.B. 10 mal zu öffnen und zu schliessen.
Kann ich nicht irgendwo eine Art EOF eintragen ?worst_case
-
ich plädier mal für meine lösung weil wenn man die daten ganz eingelesen hat dann kann man sie sehr effizient bearbeiten und das file wird nur zwei mal geöffnet... direkt auf den daten einer datei zu arbeiten ist einerlei nur überflüssig kompliziert (und performancehungrig) AFAIK
mfg japro