我正在尝试复制文件,但无论我尝试什么,拷贝似乎都少了几个字节。
_file 是一个设置为二进制模式的 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];
//Packet *p;
//Read the file and send it over the network
while(_file.read(partBytes,_bufferSize))
{
//buffer = Packet::create(Packet::FILE,std::string(partBytes));
//p = Packet::create(buffer);
//cout<< p->getLength() << "\n";
//writeToFile(p->getData().c_str(),p->getLength());
writeToFile(partBytes,_bufferSize);
//delete[] buffer;
}
//cout<< *p << "\n";
delete [] partBytes;
}
_writeFile 是要写入的文件。
void FileProcessor::writeToFile(const char *buffer,unsigned int size)
{
if(_writeFile.is_open())
{
_writeFile.write(buffer,size);
_writeFile.flush();
}
}
在这种情况下,我正在尝试复制一个 zip 文件。 但是在记事本中打开原件和拷贝我注意到虽然它们看起来相同,但在拷贝丢失几个字节的末尾有所不同。
有什么建议吗?
最佳答案
您假设文件大小是 _bufferSize
的倍数。您必须检查 之后 缓冲区中还剩下什么:
while(_file.read(partBytes,_bufferSize)) {
writeToFile(partBytes,_bufferSize);
}
if(_file.gcount())
writeToFile(partBytes, _file.gcount());
关于C++ 复制文件。数据不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9343624/