为了通过套接字发送,我一直在努力反对首先将文件分成块。我可以轻松地读取/写入文件,而无需将其拆分为块。下面的代码运行,工作,有点。它将写入一个文本文件并具有一个垃圾字符。如果这只是用于txt,没问题。Jpegs 不能处理上述垃圾。
已经做了几天,所以我已经完成了我的研究,是时候寻求一些帮助了。我确实想严格遵守二进制阅读器,因为这需要处理任何文件。
我已经看到了很多漂亮的例子。(没有一个对我有用 jpgs) 主要是一些类似于 while(file) 的东西......我订阅了,如果你知道大小,使用 for 循环,而不是 while 循环阵营。
感谢您的帮助!!
vector<char*> readFile(const char* fn){
vector<char*> v;
ifstream::pos_type size;
char * memblock;
ifstream file;
file.open(fn,ios::in|ios::binary|ios::ate);
if (file.is_open()) {
size = fileS(fn);
file.seekg (0, ios::beg);
int bs = size/3; // arbitrary. Actual program will use the socket send size
int ws = 0;
int i = 0;
for(i = 0; i < size; i+=bs){
if(i+bs > size)
ws = size%bs;
else
ws = bs;
memblock = new char [ws];
file.read (memblock, ws);
v.push_back(memblock);
}
}
else{
exit(-4);
}
return v;
}
int main(int argc, char **argv) {
vector<char*> v = readFile("foo.txt");
ofstream myFile ("bar.txt", ios::out | ios::binary);
for(vector<char*>::iterator it = v.begin(); it!=v.end(); ++it ){
myFile.write(*it,strlen(*it));
}
}