Выходные данные не совпадают с входными данными - PullRequest
0 голосов
/ 15 января 2012

Я делаю какой-то файл 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 голосов
/ 15 января 2012

Ты должен убедиться, что твой вклад был успешным!Хотя это поможет вам разобраться, вы также должны заметить, что количество байтов в файле не имеет прямой зависимости от количества читаемых символов: символов может быть меньше, чем байтов (представьте, что символ Unicode, использующий несколько байтов с использованием UTF8, должен быть закодирован)или наоборот (хотя последнее не происходит ни с одной из кодировок Unicode).Все, что вы испытываете, это то, что read() не может прочитать столько символов, сколько вы просили его прочитать, но write() с радостью написал ненужную вам ерунду.

0 голосов
/ 16 января 2012

Со мной все работает нормально, я запустил вашу программу на VC ++ 6.0 и проверил вывод в блокноте и MS Word. Можете ли вы указать имя редактора, где вы столкнулись с проблемой.

0 голосов
/ 15 января 2012

Вы не можете прочитать текст Unicode в std::vector<char>.Тип данных char работает только с узкими строками, и я предполагаю, что текстовый файл, в котором вы читаете (testinputdata.txt), сохраняется в кодировке UTF-8 или UTF-16.

Попробуйтевместо этого используйте тип wchar_t для своих персонажей.Он специально разработан для работы с «широкими» (или Unicode) символами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...