2013-05-30 2 views
0

Так что я немного озадачен этим, я не могу точно определить, что происходит с моим файлом. Я должен отметить, что я просто портировал это на Windows, и это работает правильно и, как ожидалось, в Mac OS X.ifstream - это дублирование данных в файле

В основном, моя проблема в том, что мой ifstream, похоже, дважды копирует хвостовую часть входного файла, когда . читать его в Например, если мой вход был:

Daisy, Daisy, give me your answer, do, 
I'm half crazy all for the love of you. 
It won't be a stylish marriage, 
I can't afford a carriage, 
But you'd look sweet upon the seat 
Of a bicycle built for two. 

ifstream будет читать следующим образом:

Daisy, Daisy, give me your answer, do, 
I'm half crazy all for the love of you. 
It won't be a stylish marriage, 
I can't afford a carriage, 
But you'd look sweet upon the seat 
Of a bicycle built for two. 
I can't afford a carriage, 
But you'd look sweet upon the seat 
Of a bicycle built for two. 

Это код в вопросе:

std::ifstream initialResults(inputFileLocation.toStdString().c_str()); 
std::string fileInMemory; 
initialResults.seekg(0,initialResults.end); 
fileInMemory.resize(initialResults.tellg()); 
initialResults.seekg(0,initialResults.beg); 
initialResults.read(&fileInMemory[0],fileInMemory.size()); 
initialResults.close 
//Printing here, the file in memory already contains the duplicate entries 
std::cout << fileInMemory << "\n"; 

Я совсем не уверен, что вызывает подобное поведение. Я не очень хорошо знаком с разработкой в ​​Windows, противоположной Mac, и учитывая, что программа идентична, но все же производит эти разные результаты, я собираюсь выйти на конечность и сказать, что это нечто особенное. Возможно, разница в функции вызывает конец и прошу? Но я не могу себе представить, почему он будет восстанавливать хвостовую часть файла. Да, я проверил файл, и в нем нет дубликата.

+0

Я продублировал ваш код здесь, используя строковый поток, но я не могу найти ничего, что вы сделали неправильно. (За исключением того, что вам не хватает скобки для 'initialResults.close'. - http://coliru.stacked-crooked.com/view?id=6ceb16d94b83b843bd3796ffb9d2a10d-b54d854fe598111a256b22e5ef8b561f – 0x499602D2

ответ

0

После дальнейших исследований я уверен, что это проблема с проблемой возврата каретки/строки в Windows. Вам необходимо открыть файл в двоичном режиме ios_base::binary для подавления преобразования.

Смежные вопросы