Должен ли я искать после каждого чтения, используя ifstream?

Это цикл, который я использую для чтения из файла любого размера и записи в 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.

3

Решение

Это необязательно. Чтение продолжается с того места, где был последний раз замечен указатель файла, точно так же, как и при записи.

6

Другие решения

Я рискнул бы поспорить, что файл не был открыт в std::ios_base::binary режим и оба memset() и seekg() были использованы, чтобы замаскировать результирующие эффекты: ни один из них не нужен, хотя вам может потребоваться очистить завершающие байты в конце файла, если он читает частичную запись.

Кстати: вы всегда хотите проверить состояние потока после чтение:

while (in.read(buffer, size)) {
...
}

Также: sizeof(char) == 1,

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector