Контекст: Я пытаюсь прочитать содержимое изображения PNG на C ++, чтобы позже отправить его в мое приложение для Android.Для этого я открываю файл в двоичном режиме, читаю его содержимое кусками по 512 байт, а затем отправляю данные в приложение.Я на Windows.
Проблема: Я использую экземпляр ifstream и функцию readsome () , как показано ниже, и она возвращаетя 512, что я и ожидал, поскольку попросил прочитать 512 байт.Тем не менее, похоже, что в моем буфере далеки от 512 байт, что меня смущает.Пока я отлаживаю свою программу шаг за шагом, число символов в буфере кажется случайным, но никогда не бывает 512, как ожидалось.
Код:
int currentByteRead = 0;
std::ifstream fl(imgPath.toStdString().c_str(), ios_base::binary);
fl.seekg( 0, std::ios::end );
int length = fl.tellg();
char *imgBytes = new char[512];
fl.seekg(0, std::ios::beg);
// Send the img content by blocks of 512 bytes
while(currentByteRead + 512 < length) {
int nbRead = fl.readsome(imgBytes, 512); // nbRead is always set to 512 here
if(fl.fail()) {
qDebug() << "Error when reading file content";
}
sendMessage(...);
currentByteRead += 512;
imgBytes = new char[512];
}
// Send the remaining data
int nbRemainingBytes = length - currentByteRead;
fl.readsome(imgBytes, nbRemainingBytes);
sendMessage(...);
fl.close();
currentByteRead += nbRemainingBytes;
Длина, которую я получаю в начале, является правильной, и, похоже, ошибки нет.Но это как если бы не все данные были скопированы в буфер во время вызова readsome () .
Вопросы: Неужели я что-то не так понял относительно функция readsome () ?Есть ли что-то, связанное с Windows, вызывающее такое поведение?Есть ли более подходящий способ продолжить?