Teilweises Abschneiden eines Streams (fstream oder ofstream) in C++

Lesezeit: 2 Minuten

Ich versuche, eine vorhandene Datei mit fstream teilweise abzuschneiden (oder zu verkürzen). Ich habe versucht, ein EOF-Zeichen zu schreiben, aber das scheint nichts zu tun.

Jede Hilfe wäre willkommen…

Benutzer-Avatar
Matt Tischler

Ich glaube nicht, dass du das kannst. Es gibt viele Funktionen, um die Wrapper-Hierarchie “auf und ab” zu bewegen HANDLE<->int<->FILE *zumindest unter Windows, aber es gibt kein “richtiges”, um das zu extrahieren FILE * aus einem iostreams-Objekt (wenn es überhaupt mit einem implementiert ist).

Vielleicht hilft Ihnen diese Frage weiter.

Persönlich würde ich dringend empfehlen, sich von iostreams fernzuhalten, sie sind schlecht gestaltet, stark C++-lastig und hässlich anzusehen. Schauen Sie sich an Boosts Iostreamsoder wickeln stdio.h wenn Sie Klassen verwenden müssen.

Die relevante Funktion für stdio ist ftruncate().

Das Boost.Interprozess Bibliothek definiert eine portable truncate Funktion. Aus irgendeinem Grund ist es nicht dokumentiert, aber Sie können es finden diese Header-Datei.

  • ftruncate ist portabel wie in Posix. Aber es verwendet natürlich keine C++-Streams.

    – Johannes Zwinck

    15. Februar 2010 um 17:16 Uhr

  • Ja, ich meinte portabel für Posix und Win32.

    – Manuel

    15. Februar 2010 um 17:21 Uhr

Es wird vom Betriebssystem abhängen. Die meisten Betriebssysteme unterstützen dies, jedoch auf unterschiedliche Weise. Unter Windows gibt es eine SetEndOfFile(). Auf Unix und ähnlichen Systemen Sie lseek an die Stelle, an der die Datei enden soll, und führen Sie eine aus lwrite von null Bytes dort. Andere Betriebssysteme verwenden zweifellos andere Methoden.

  • Sicherlich würde man Unix verwenden ftruncate(2).

    – Johannes Zwinck

    15. Februar 2010 um 17:15 Uhr

Ich habe am Ende in den sauren Apfel gebissen und den Teil der Datei gelesen, der in einem Array aufbewahrt werden soll, und ihn dann neu geschrieben. Es ist nicht die beste Lösung – aber da die Dateien immer klein sein werden, habe ich mich für diese Methode entschieden.

1015710cookie-checkTeilweises Abschneiden eines Streams (fstream oder ofstream) in C++

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy