0

私は、もう一方が書き込むファイルを読み取ることによって通信する 2 つのプログラムを作成しています。

私の問題は、他のプログラムが最初のプログラムによって作成されたファイルを読み取っているときに、最後のデータの最後に奇妙な文字を出力することです。テキストファイルにデータを追加すると通常の出力になる可能性があるため、これは一見ランダムに発生するだけです。

私は C++ と Qt4 を利用しています。これはプログラム 1 の一部です。

std::ofstream idxfile_new;
QString idxtext;
std::string fname2="some_textfile.txt";    //Imported from a file browser in the real code.
idxfile_new.open (fname2.c_str(), std::ios::out);
idxtext = ui->indexBrowser->toPlainText(); //Grabs data from a dialog of the GUI.
                                           //See 'some_textfile.txt' below
idxfile_new<<idxtext.toStdString();
idxfile_new.clear();
idxfile_new.close();

some_textfile.txt:

3714.1 3715.1 3716.1 3717.1 3719.1 3739.1 3734.1 3738.1 3562.1 3563.1 3623.1 

プログラム 2 の一部:

std::string indexfile = "some_textfile.txt";    //Imported from file browser in the real code
std::ifstream file;
std::string sub;
file.open(indexfile.c_str(), std::ios::in);
while(file>>sub)
{
    cerr<<sub<<"\n";    //Stores values in an array in the real code
}

これは以下を出力します:

3714.1
3715.1
3716.1
3717.1
3719.1
3739.1
3734.1
3738.1
3562.1
3563.1
3623.1�

さらにデータを追加すると、時々機能します。のようなデータを出力する場合もあります。

3592.�

また

359�

最後に。そのため、データ全体の読み取りにも一貫性がありません。最初は、eof が適切に読み取られていないと考え、同様の問題に対する多くの解決策を読んで試しましたが、正しく動作させることができませんでした。

4

1 に答える 1

0

助けてくれてありがとう!

今朝、自分で問題を解決することができました。同じ問題を抱えている人のために、私の解決策を投稿します。問題は、ファイル作成時の UTF-8 エンコーディングでした。これが私の解決策です:

プログラム 1 の一部:

std::ofstream idxfile_new;
QString idxtext;
std::string fname2="some_textfile.txt";
idxfile_new.open (fname2.c_str(), std::ios::out);
idxtext = ui->indexBrowser->toPlainText(); 

QByteArray qstr = idxtext.toUtf8(); //Enables Utf8 encoding
idxfile_new<<qstr.data();
idxfile_new.clear();
idxfile_new.close();

もう一方のプログラムは変更されません。16 進コンバーターは、余分な文字を「ef bf bd」として表示しました。これは、Utf8 にエンコードするときに無効なバイトを置換する置換文字 U+FFFD によるものです。

于 2013-10-21T08:02:14.700 に答える