Я пытаюсь разделить данные на маленькие пакеты. Я не совсем уверен, как этот метод чтения должен работать, но я дал размер буфера 512 для чтения из файла.
Но вместо 512 я получаю 5 в моем первом пакете. Другие варьируются от 0 до 512 (что не должно происходить).
Это почтовый файл, который я пытаюсь разделить:
В тексте первые несколько байтов выглядят так:
(де-ведро как символы на самом деле 2 символа)
Кажется, он захватывает первые 5 байтов, как и должно, но потом просто останавливается и переходит к следующему блоку чтения.
Так как это буфер из 512, все после первых 5 байтов является мусором.
Я использую ifstream. И режим установлен на Binary.
Есть предложения?
void FileProcessor::send()
{
//If no file is opened return
if(!_file.is_open()) return;
//Reset position to beginning
_file.seekg(0, ios::beg);
//Result buffer
char * buffer;
char * partBytes = new char[_bufferSize];
//Read the file and send it over the network
while (_file.read(partBytes, _bufferSize))
{
buffer = Packet::create(Packet::FILE,partBytes);
Packet *p = Packet::create(buffer);
//cout << strlen(partBytes);
//p->PrintHex(buffer,_bufferSize+Packet::HeaderSize);
//break;
cout << "Normal size : \t" << strlen(partBytes)<< "\tPacketSize: \t" << p->getLength()<<"\n";
//cout << strcmp(p->getData().c_str(),partBytes) << "\n";
writeToFile(p->getData().c_str(),p->getData().length());
delete p;
}
//Write final bytes if any
if(_file.gcount())
{
//writeToFile(partBytes, _file.gcount());
buffer = Packet::create(Packet::FILE,partBytes);
Packet *p = Packet::create(buffer);
writeToFile(p->getData().c_str(),p->getData().length());
//cout << p->getLength() << "\n";
delete p;
}
//cout<< *p << "\n";
delete [] partBytes;
}
Я сейчас тестирую прямое чтение и запись.