2016-04-05 17 views
2

Ich bekomme keine richtige Ausgabe bei der Verwendung von seekp und seekg Funktion, während auf der anderen Seite, wenn ich ios :: app zum Anhängen verwenden, Programm funktioniert gut. Wie verwende ich die Funktionen seekg() und seekp() zum Anhängen an eine Datei?Wie an Datei mit seekg und seekp in C++ anhängen, ohne Verwendung von ios :: app flag

#include<iostream.h> 
#include<conio.h> 
#include<fstream.h> 
void main() 
{   clrscr(); 

ofstream out; 
out.open("MJ"); 
char data[100]; 
cout<<"\nEnter data: "; 
cin.getline(data,100); 
out<<data; 
out.close(); 
ifstream in; 
in.open("MJ"); 

in>>data; 
cout<<data; 

in.close(); 


out.open("MJ"); 

cout<<"\nEnter data: "; 
cin.getline(data,100); 
out.seekp(2); 
out<<data; 

out.close(); 

in.open("MJ"); 
in>>data; 
cout<<data<<endl; 


    getch(); 

} 
+0

Anstelle von 'std :: ios :: app' können Sie' std :: ios :: ate' verwenden, um die Datei mit dem Dateizeiger bereits am Ende der Datei zu öffnen (aber nicht im Append-Modus). Vielleicht zeigen Sie uns, was Sie getan haben und wir können sehen, wo Sie falsch liegen? – Galik

+0

Sie wissen, dass ['seekp'] (http://en.cppreference.com/w/cpp/io/basic_ostream/seekp) und [' seekg'] (http://en.cppreference.com/w/ cpp/io/basic_istream/seekg) betrifft verschiedene Dateizeiger? –

+0

Und können Sie bitte versuchen, ein [minimales, vollständiges und überprüfbares Beispiel] (http://stackoverflow.com/help/mcve) zu erstellen und uns zu zeigen? –

Antwort

2

Wenn Sie out.seekp(2) tun nur Sie versuchen, zwei Bytes in die Datei, und dann überschreiben, was darüber hinaus ist, aber das ist nicht das Problem.

Das Problem ist, wenn Sie die Datei wieder öffnen die alten Inhalte zerstört wird, wird die Datei abgeschnitten. Sie müssen die Datei in open | in Modus öffnen, nicht Inhalt zu zerstören, wenn man manuell an das Ende will suchen:

out.open("MJ", ios::out | ios::in); 

ist es in Ordnung zu öffnen einen „Ausgang“ Strom in ios::in Modus.

Siehe z.B. this reference die eine schöne Tabelle von Modi haben und was sie tun und meinen.

+0

Vielen Dank Herr! aber ich dachte 0- bedeutet zu Beginn 1 - bedeutet bei Strom und - am Ende. –