输出数据与输入数据不同

时间:2012-01-15 18:25:08

标签: c++ io

我正在做一些文件io并在下面创建了测试,但我认为testoutput2.txt在运行后会与testinputdata.txt相同吗?

testinputdata.txt:

some plain
    text
 data with
 a  number
42.0

testoutput2.txt(在某些编辑器中,它在单独的行上,但在其他编辑器中,它们全部在一行上)

some plain
਍ऀ琀攀砀琀ഀഀ
 data with
਍ 愀  渀甀洀戀攀爀ഀഀ
42.0  

int main()
{
    //Read plain text data
    std::ifstream filein("testinputdata.txt");
    filein.seekg(0,std::ios::end);
    std::streampos length = filein.tellg();
    filein.seekg(0,std::ios::beg);
    std::vector<char> datain(length);
    filein.read(&datain[0], length);
    filein.close();

    //Write data
    std::ofstream fileoutBinary("testoutput.dat");
    fileoutBinary.write(&datain[0], datain.size());
    fileoutBinary.close();

    //Read file
    std::ifstream filein2("testoutput.dat");
    std::vector<char> datain2;
    filein2.seekg(0,std::ios::end);
    length = filein2.tellg();
    filein2.seekg(0,std::ios::beg);
    datain2.resize(length);
    filein2.read(&datain2[0], datain2.size());
    filein2.close();

    //Write data
    std::ofstream fileout("testoutput2.txt");
    fileout.write(&datain2[0], datain2.size());
    fileout.close();
}

3 个答案:

答案 0 :(得分:0)

您无法将Unicode文本读入std::vector<char>char数据类型仅适用于窄字符串,我的猜测是您正在读取的文本文件(testinputdata.txt)使用UTF-8或UTF-16编码保存。

请尝试使用wchar_t类型代替字符。它专门设计用于“宽”(或Unicode)字符。

答案 1 :(得分:0)

你要确认你的输入是否成功!虽然这会让你感到厌烦,但你还应注意文件中的字节数与正在读取的字符数没有直接关系:字符数可能少于字节数(想想使用UTF8编码的多个字节的Unicode字符)反之亦然(尽管后者不会出现任何Unicode编码)。您所经历的只是read()无法读取您要求阅读的字符数,但write()乐意写下您给它的垃圾。

答案 2 :(得分:0)

它的工作正常,我在VC ++ 6.0上运行你的程序并检查记事本和MS Word的输出。你能指出你面临问题的编辑名称吗?