Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » In Datei: Cursor zurück und Umlaute

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
30.03.2007, 13:41 Uhr
Suba Esel



Gibts eine Möglichkeit, in einer Datei den Cursor einen zurückzusetzen? Also sozusagen

C++:
std::ofstream out("test.txt");
out << "asdf" << "\b\b\b" << "123";


und dass dann in der Datei "123f" steht?
Und wie kann man Umlaute in ne Datei schreiben? Selbst wenn ich die Backslash - Sachen nehm - das funktioniert trotzdem nicht.
--
Simon
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
30.03.2007, 15:06 Uhr
Blubber2063



Setz einfach den Dateioffeset, mit seek auf die Stelle wo du hin willst.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
30.03.2007, 15:19 Uhr
Suba Esel



Äh... was? Kann man denn sagen, dass ich einen zurück will? Wieso geht das eigentlcih nicht mit \b - \n funktioniert doch auch.
--
Simon
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
30.03.2007, 16:57 Uhr
Blubber2063



Ja kann man, man muss nur den aktuellen Dateizeiger, entsprechend zurücksetzen. Schau dir halt mal die Seek Methoden vom OStream an.

Und das funktioniert nicht mit Steuerzeichen, weil das eine Datei und keine Console ist, soll heißen die Console verarbeitet das Zeichen für dich passend, die Datei nimmt einfach nur das Byte auf, ist ja keine Logik hinter. Und \n funktioniert nicht, es ist nur ein Newline Zeichen das dir unter Linux und wenn der Editor tollerant ist unter Windows abgenommen wird. Aber dort interpretiert der Editor nicht die Datei. Eine Datei sind einfach nur Daten mit den Informationen über die Datei selbst, Name, Ort, Größe, etc.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
30.03.2007, 18:01 Uhr
xXx
Devil


hmm www.cppreference.com/cppio/seekp.html und halt bei seek_dir einfach die momentane Pos angeben (also gibt es nen parameter der die als wert nimmt) und dann nen negativen offset wert ... dann funzt das...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
31.03.2007, 12:12 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


also z.B


C++:
stream.seekp(-5, ios::cur);



schiebt den schreibzeiger um 5 einheiten nach links.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
01.04.2007, 14:48 Uhr
Suba Esel



Hmm, Problem an der Sache: ich will den alten Inhalt der Datei behalten und nur die letzten 8 Zeichen überschreiben. Sobald ich aber mit std::ios::app öffne, funktioniert das mit seekp nicht mehr, warum auch immer.
--
Simon
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
01.04.2007, 18:45 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


da da die position 0 die letzte position in der Datei ist (append)

mach ein ios::notrunc rein dann sollte er die datei öffnen und der Zeiger steht am Anfang(!) der Datei, ohne das er den Dateiinhalt löscht (trunc -> truncate)
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
01.04.2007, 18:56 Uhr
Suba Esel



Ja ich möchte aber an das Ende der Datei minus 8 Zeichen schreiben und zwar so, dass das alte überschrieben wird.
Ich schreib an nem Programm, was speichert, von wann bis wann der PC an war. Dazu will ich alle ka 30 Sekunden oder so den alten "bis - Wert" überschreiben. In der Datei sieht das so aus: Sonntag, 1. April 2007 18:52:30 - 18:52:30. Dies ist bei Programmstart, und der soll dann halt das letzte 18:52:30 mit dem jeweils aktuellen Wert überschreiben.

Achja, was meinst du mit "schmeiß ein ios::notrunc rein"? Wenn ich das so mach: std::ofstream out("test.txt", std::ios::notrunc"); krieg ich die Meldung, notrunc wäre kein Member von ios.
--
Simon

Dieser Post wurde am 01.04.2007 um 18:58 Uhr von Suba Esel editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
01.04.2007, 21:58 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


ok sry, das gibts da ja so in der Form nicht

so klappt das: (ofstream setzt implizit ios::out, und mit ios::in zusammen ist das das gegenstück zu r+ von fopen)


C++:
#include <fstream>

int main()
{
  std::ofstream out("/tmp/t", std::ios::in);

  // position setzen
  out.seekp(0, std::ios::end);
  // irgendwas an die Stelle schreiben
  out << "bar" << std::endl;

  out.close();
}



du kannst alternativ statt dem seekp ans Ende auch direkt noch mit std::ios::ate öffnen, da steht die position dann schon am Ende der Datei.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: