Bestimmte Zeilen in einer Datei löschen



  • Hi,
    wie kann ich am einfachsten Inhalt(meist eine ganze Zeile) in einer Datei löschen?
    Mit Leerzeichen überschreiben ist ja nicht wirklich was ich will, will ja das ganze löschen. Nullterminierungszeichen gehen ja auch net.
    Den Inhalt der Datei zu speichern und die Datei neu zu erstellen (nachm Löschen) könnte schwer werden da ich nicht genau was wie groß die Datei wird und der Arbeitsspeicher das verfkraftet. Und auf die Festplatte auslagern erscheint mit unnötig.
    ALso wie kann ich am einfachsten Inhalt einer Texteditorfähigen Datei (also nicht im binär Modus geöffnet) löschen? Muss sowohl bestimmte Sachen als auch den gesamten Inhalt der Datein löschen können.

    Danke



  • Aus technischen Gründen ist das Löschen mitten in Dateien meistens nicht möglich. Datei komplett auslesen -> zu löschende Daten entfernen -> Datei neu speichern.

    Welche Größe von Dateien hast du denn? Sollten die wirklich > 1-2MB sein kannst du dich ja über File Mapping informieren. Alles was kleiner ist fällt nicht weiter ins Gewicht.

    MfG SideWinder



  • Naja kommt halt drauf an wie viel der User speichert, wobei das gehen dürfte.
    Nur denke ich auch über die Performence nach und da ich dann eine ganze Reihe an Funktionen wieder ausführen müsste, weiss ich nicht wie wirtschaftlich ein neu erstellen ist...
    ICh schau mal was File Mapping ist-danke
    Sonst gehts wohl net anders...
    Bzw. Könnt ich die Datei nicht auf einfach Überschreiben? Dann brauch ich das nicht neu erstellen- das geht ja zumindet dann, wenn ich nur einzelne Inhalt löschen will



  • Klar kannst du die Datei überschreiben - darum gehts ja. Alle gespeicherten Werte neu zu berechnen - oder was auch immer - ist natürlich nicht der richtige Weg.

    Dateien bestehen grundsätzlich aus einer Ansammlung von Daten und nicht aus Zeilen. Bei Textdateien dient unter Windows \r\n als Zeilenumbruch. Eine solche Textdatei sieht also im Speicher so aus:

    Zeile 1 mit etwas Text\r\nZeile 2 mit anderem Text\r\n...Zeile 100 mit tollem Text
    

    C++ bietet dir die Möglichkeit die Datei gleich als Textdatei zu sehen, daher kannst du sie direkt zeilenweise einlesen. Zum Beispiel in ein String-Array:

    vector<string> lines = readLinesFromFile();
    

    Aus dem Array löscht du jetzt alle Zeilen die du nicht mehr benötigst. Danach öffnest du die Datei erneut - diesmal im Schreibmodus und schreibst die Zeilen wieder raus:

    writeLinesToFile(lines);
    

    Den Inhalt der Funktionen readLinesFromFile() + writeLinesToFile() solltest du schaffen. Bei Rückfragen poste einfach wieder.

    MfG SideWinder



  • Ja, das Problem ist doch aber, WOMIT ich die Datei überschreiben will.
    Ich kann sie Löschen und alles nötige einfüge, aber ist das Wirklich nötig?
    Geht das nicht auch anders?
    Ich lesen den Inhalt aus und nehmen die nicht benötigten Daten weg(oder alle...) und was schreibe ich dann in die Datei?
    Das Problem ist ja, dass die Datei dann ja vom Inhalt kürzer wird und ich nicht weiss wie ich die Überflüssigen Einträge löschen soll.
    Die Funktionen zum auslesen in Reihen etc. hab ich schon länger, aber ich weiss halt net wie ich den Inhalt löschen bzw,. überschreiben soll...



  • Dateien werden insofern überschreiben, als dass die alte Datei gelöscht wird und eine neue angelegt wird. Von daher musst du dir beim kompletten Neuschreiben einer Datei gar keine Gedanken um den vorherigen Inhalt machen.

    MfG SideWinder


Anmelden zum Antworten