2016-04-24 27 views
-1

Everthingをf < < "文字列" < < TEMP_INT < <てendlまでうまくいく全体の出力を書いていない動作します。声明 は異なるopenmodesと異なる結果を取得するには、いずれかのすべてで書いたり、「NumberSaves」fstreamのは、<<

unsigned int temp_int = 0; 
fstream f("resources/saveData/Player/savelog.txt"); 
if (!f) 
{ 
    cout << "error accessing savelist" << endl; 
} 
else 
{ 
    string skip; 
    std::stringstream iss; 
    string line; 
    readVarFromFile(f, iss, skip, line, { &temp_int });  //check how many saves currently 
    temp_int += 1;           //increment number of saves by 1 
    f.seekp(ios_base::beg); 
    cout << "Write position: " << f.tellp() << endl;   //check stream is at beginning 
    f << "<NumberSaves>" << temp_int << endl;    //truncate <NumberSaves> 'x' with <NumberSaves> 'x + 1' 
    cout << "Write position: " << f.tellp() << endl;   //position suggests the entire string has been written, only two characters have been 
    if (!f) 
    { 
     cout << "ERROR"; 
    } 

    f.seekp(ios_base::end); 
    f << currentPlayer->getName();       //append players name to end of file 
} 

所望の出力の最初の2つの文字を書き込みしません

NumberSaves 2
はプレイヤー
を以下のようです anotherplayer

電流出力

ニュー
プレーヤー

+1

「readVarFromFile()」とは何ですか? [MCVE]を提供してください。 –

+0

バイナリモードで開いたファイルには、ファイル内の位置を探すことが最も適していることを理解してください。ファイルがテキストモードで開かれている場合、改行や改行が行われているため、 'seekp'や' tellp'などを使って望む結果を得ることはできません。 – PaulMcKenzie

+0

これは問題の一部ではない機能ですが、混乱の原因になった場合はごめんなさい –

答えて

0

適切にこのような使用seekp: http://en.cppreference.com/w/cpp/io/basic_ostream/seekp

のstd :: ios_baseのコード例で

os.seekp(0, std::ios_base::end); // means bring me to 0 from the end of file. 

表情::エンド方向であります絶対的な位置ではありません。これは単なるenum値です。値はおそらく2であり、それがファイル内の2位になる理由です。

+0

5人のプレイヤーがいる場合(別々の行にすべて)、「Number of Saves」の後に続けて書き込むことはできませんプレーヤーを上書きする –

関連する問題