1

fstreamからのgetline命令に問題があります。これは私のコードからの抜粋です:


boolean_1=true;
while(true)
{
   if(boolean_1)
   {
      //some stuff
   }
   else
   {
        save_file.open("save.txt", fstream::in);
        //some stuff
        save_file.close();
   }

    mission_file.open(filename, fstream::in);
    mission_file.getline(buffer_line, 256);

    //some other stuff

    boolean_1=false;
    save_file.open("save.txt", fstream::out);
    //write something
    save_file.close();    
}

このコードは、最初に実行されたときにmission_fileを開き、次の反復で保存ファイルを開く必要があります。保存ファイルは、すべてのサイクルの最後に作成されます。少なくとも、このように機能するはずです。なぜなら、最初はすべてが完璧に機能しますが、次の反復では「mission_file.getline(buffer_line、256);」です。空の行を返し、プログラムをクラッシュさせます。また、boolean_1がfalseとして開始された場合、サイクルは次のサイクルまで正常に機能します。

必要な「.txt」の存在をすでに確認しました。mission_fileとsave_fileの両方がis_open()trueを返します。

4

2 に答える 2

2

投稿したコードの抜粋からはわかりませんがstd::fstream、各サイクルで同じオブジェクトを再利用しているようです。

ファイルを再度開く必要がある時点で、ループ内に新しいローカルオブジェクトを作成する方が明確です。

同じオブジェクトを再利用しfstreamて新しいファイル(または同じファイルをもう一度開く)を開く必要がある場合は、新しいファイルから読み取る前に、ストリームエラーフラグを必ずクリアする必要があります。

新しいファイルから最初に読み取る前のある時点でを実行するclearと、これが実行されます。

mission_file.clear()
于 2010-08-21T09:34:48.157 に答える
0

mission_file見えないので、それが閉じられていることを確認していますかmission_file.close()。それとも、ここのコードスニペットにその行を入れなかっただけですか。

于 2010-08-21T09:06:03.580 に答える