Это цикл, который я использую для чтения из файла любого размера и записи в 1016-байтовый пакет char * 1016 байтов каждый раз, когда отправляю его (отправка еще не включена).
Нужен ли seekg ()? Или чтение уже перемещает указатель на начало следующего блока?
ifstream file (packet.message, ios::in|ios::binary|ios::ate);
if(file.is_open()) {
size = file.tellg();
file.seekg(0, ios::beg);
for(int i = 0; !ios::eof; i++) {
memset(packet.message,0,1016*sizeof(char));
file.read(packet.message,1016*sizeof(char));
file.seekg(i*1016*sizeof(char));
}
}
Я знаю, что это не проблема для записи в файл, так как вы просто продолжаете писать до конца, пока файл не станет нужного размера.
Изменить: добавлен весь кусок кода в операторе if.
Это необязательно. Чтение продолжается с того места, где был последний раз замечен указатель файла, точно так же, как и при записи.
Я рискнул бы поспорить, что файл не был открыт в std::ios_base::binary
режим и оба memset()
и seekg()
были использованы, чтобы замаскировать результирующие эффекты: ни один из них не нужен, хотя вам может потребоваться очистить завершающие байты в конце файла, если он читает частичную запись.
Кстати: вы всегда хотите проверить состояние потока после чтение:
while (in.read(buffer, size)) {
...
}
Также: sizeof(char) == 1
,