2016-04-05 10 views
2

seekpとseekg関数を使用しているときに適切な出力が得られません。一方、ios :: appを追加、プログラムはうまくいきます。ファイルに追加するためにseekg()、seekp()関数をどのように使うべきですか?ios :: appフラグを使用せずにseekgとseekpを使用してファイルに追加する方法

#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

'std :: ios :: app'の代わりに' std :: ios :: ate'を使って、ファイルの最後にあるファイルポインタを使ってファイルを開くことができます(ただし、追加モードではありません)。たぶんあなたがしたことを私たちに見せてくれるでしょう。どこが間違っているのか分かりますか? – Galik

+0

あなたは['seekp'](http://en.cppreference.com/w/cpp/io/basic_ostream/seekp)と[' seekg'](http://en.cppreference.com/w/)を知っています。 cpp/io/basic_istream/seekg)が異なるファイルポインタに影響しますか? –

+0

そして、[最小限の、完全で検証可能な例](http://stackoverflow.com/help/mcve)を作成して見せてください。 –

答えて

2

あなたはout.seekp(2)あなただけのファイルに2バイトを追求し、その超えているものは何でも上書きし、それは問題ではないん。

問題は、古い内容が破棄されたファイルを再度開くと、ファイルが切り捨てられることです。手動で最後まで追求したい場合は、内容を破壊しないようにopen | inモードでファイルを開く必要があります。

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

それはios::inモードで「出力」ストリームをオープンしても大丈夫です。

this referenceには、モードの素敵なテーブルとその意味と意味があります。

+0

ありがとうございました! しかし、私は0と思った。 –

関連する問題