Что я хочу сделать, отправьте файл 8kB за раз. (Без заполнения памяти с полным файлом)как работает ifstream readsome точно
Это мой код:
while (file.good()){
file.readsome(sinLine,8000);
client.saveFile(_return, std::string(sinLine), file_name);
}
файл является std::ifstream
для текстового файла.
клиент является thriftClient
, (я не знаю, как важно, что есть проблемы)
sinLine
является char * [8000]
Проблема заключается в том, что полученный для файла 242.2kB и послал файл 142.6kB.
В отладчике я заметил, что он прошел цикл более 18 раз (142/8 = 17,25), но он не продолжается вечно (я точно не знаю, сколько раз, но это, вероятно, 242/8 раз).
Я также заметил, что каждый третий цикл (3, 6, 9 ...) значение sinLine
не показывалось в моей среде IDE (QtCreator).
Так что мои вопросы, как работает readsome()
? и я использую его правильно? или я должен использовать другую функцию? или, может быть, преобразование из char * в std::string
не верное?
Благодарим вас за ответ! Я попробовал ваше решение, и он работал намного лучше! К сожалению, файл все еще не того же размера:/вместо 142kB это сейчас 160kB. Не могли бы вы представить, почему это так? – Anthony
@ Энтони: какие отличия? Вы открыли исходный файл в двоичном режиме? Если исходный файл использует текстовый режим, и адресат не переписывает последовательности строк, которые могут учитывать некоторые отличия. Возможно, будет разумно отдельно проверить, что чтение файла работает ОК, записав его во временный файл. –
Я заметил, что проблема была, это была глупая ошибка, я добавлял «\ n» на стороне записи. LOL удалил ее, и теперь она работает так же, как я хочу! большое спасибо, я принял ваш ответ! – Anthony