我試圖將數據拆分爲小數據包。我不完全確定這個讀取方法是如何工作的,但是我已經給出了從文件中讀取的512的緩衝區大小。 但我沒有得到512我只是得到5我的第一個數據包。其他人從0到512以上(這不應該發生)。C++ ifstream.read;讀取字節少於給定的n個字節
它我試圖分裂出一個zip文件: 在文本中的第幾個字節這個樣子
(如字符德鬥實際上是2個字符)
這似乎抓住前5個字節,但之後會停止並轉到下一個讀取塊。
由於它的緩衝區是512,所以前5個字節是垃圾。 我正在使用ifstream。該模式設置爲二進制。
有什麼建議嗎?
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;
}
我只是現在正在測試直接讀寫。
我們不能沒有代碼 – 2012-02-19 18:03:04
很難提出任何建議,因爲你沒有顯示你正在使用的代碼。 – 2012-02-19 18:03:11
'_file.gcount()'返回上次讀取的字節數,而不是剩下多少字節。如果文件中的字節數小於_bufferSize字節,則不會輸入「while」。請閱讀使用 – 2012-02-19 18:11:49