读取文件时的额外字符。 C ++

时间:2013-10-18 14:20:38

标签: c++ qt file-io ifstream qtcore

我正在编写两个程序,通过读取另一个写入的文件进行通信。

我的问题是,当另一个程序正在读取由第一个程序创建的文件时,它会在最后一个数据的末尾输出一个奇怪的字符。这似乎只是随机发生,因为向文本文件添加数据可以导致正常输出。

我正在使用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,我已经阅读并尝试了许多类似问题的解决方案,但无法使其正常工作。

1 个答案:

答案 0 :(得分: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();

其他程序保持不变。 十六进制转换器将额外字符显示为'ef bf bd',这是由于替换字符U + FFFD在编码为Utf8时替换无效字节。