Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

11

02.05.2011, 20:19

Hmm ... Da Stellt sich mir die Frage, wie das funktioniert, wenn in der Datei schon eetwas steht und ich möchte dort vorspringen ...
Ich bekomme dabei immer einen fehler beim funktionsaufruf von seekp (-1), wenn ich den um z.b. 4 stellen verringern möchte.
Funktioniert das nur für text, der gerade erst geschrieben wird?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

12

02.05.2011, 23:16

Ah sry, ein fstream hat wohl doch nur einen Pointer. Aber so gehts z.B.:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <fstream>


int main()
{
  std::fstream file("bla.txt");

  while (file)
  {
    file.seekg(3, std::ios::cur);
    char c = file.get();
    file.seekp(-4, std::ios::cur);
    file.put(c);
  }
}

13

03.05.2011, 16:10

Kann man das File nur umkopieren, oder gibt es auf eine möglichkeit, einfach was neues an die stelle zu überschreiben?
Weil indem ich dem char einfach z.B. 'a' gebe, passiert gar nix bei mir ;)

Edit: Was bewirkt das ios::cur? konnte nur rausfinden, dass es iwie für das schieben der pointer benötigt wird?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Ombalat« (03.05.2011, 16:22)


dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

14

03.05.2011, 16:45

Kann man das File nur umkopieren, oder gibt es auf eine möglichkeit, einfach was neues an die stelle zu überschreiben?
Weil indem ich dem char einfach z.B. 'a' gebe, passiert gar nix bei mir ;)

Natürlich kannst du auch was in der Datei überschreiben. Einfach seekp() an die entsprechende Stelle und los gehts...

Edit: Was bewirkt das ios::cur? konnte nur rausfinden, dass es iwie für das schieben der pointer benötigt wird?

Das sagt dass von der aktuellen (current) Position des Zeigers weg gezählt werden soll.
http://www.cplusplus.com/reference/iostream/ostream/seekp/

15

03.05.2011, 16:51

Vielen Dank für die hilfe .. eine frage habe ich noch ...

Worin liegt bitte der unterschied, ob ich jetzt

C-/C++-Quelltext

1
2
char c = 'c';
file.put(c);

oder

C-/C++-Quelltext

1
file.put('c');

schreibe?

Ersteres funktioniert nicht

EDIT: Fehler behoben
Hatte unabsichtichtlich die Position des put pointers unter den dateianfang gesetzt :S

Liebe Grüße, Ombalat

Werbeanzeige