ソケットを介して送信する目的で、最初にファイルをチャンクに分割しようとすることに頭を悩ませてきました。ファイルをチャンクに分割せずに簡単に読み書きできます。以下のコードは実行され、機能します。テキストファイルを書き込み、文字化けします。これがtxtのみの場合は問題ありません。JPEGは、上記のゴミでは機能しません。
数日間それを行っていたので、調査を行ったので、助けを求める時が来ました. これは任意のファイルを処理する必要があるため、バイナリリーダーに厳密に固執したいと思います。
私はそこに多くの洗練された例を見てきました。(それらのどれも jpg では機能しませんでした) ほとんどが while(file) の行に沿ったものです... サイズがわかっている場合は、while ループ キャンプではなく for ループを使用します。
お手伝いありがとう!!
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));
}
}