c++fwrite 复制文件换行符添0x0d

c++fwrite 复制文件换行符加0x0d
我想把in文件的内容添加到out文件的末尾

如果我打开格式加上了app或ate,复制后内容的二进制文件被改了,碰到0x0A,会自动在前面加上0x0D.大家都是怎么处理的这问题?


ifstream in;
in.open(inpath,ios::binary);
ofstream out;
out.open(outpath,ios::binary||ios:app ate);        //  ||ios:app ate out 换行符会改变????但不写文件会被清除

in.seekg(0,ios::end);
long long size=in.tellg();
out.seekp(0,ios::end);
char * buf=(char * )malloc(size);//有隐含截断错误

in.seekg(0,ios::beg);
in.read(buf,size);
out.seekp(1,ios::end);
out.write(buf,size);



------解决思路----------------------
windows就是两个字节的,不用文本用二进制就可以了
------解决思路----------------------
可以读到vector里面,然后在每个0x0a后面插入0x0d
------解决思路----------------------
打开文件有两种方式,一种是文本方式打开,一种是二进制方式打开。不同的打开方式,会导致不同的行为。

windows上和linux上的行为又不一样。楼主遇到这问题了,正是时候百度一下相关信息学习。
------解决思路----------------------
仅供参考
#include <stdio.h>
FILE *f;
int c1,c2;
int main(int argc,char *argv[]) {
    if (argc!=2) {
        printf("Usage: CR2CRLF filename\n");
        return 1;
    }
    f=fopen(argv[1],"rb+");
    if (NULL==f) {
        printf("Can not open file [%s]!\n",argv[1]);
        return 2;
    }
    while (1) {
        c1=fgetc(f);
        if (EOF==c1) break;
        if ('\r'==c1) {
            c2=fgetc(f);
            if (EOF==c2) {
                fseek(f,-1L,SEEK_CUR);
                fputc('\n',f);
                break;
            }
            if ('\n'!=c2) {
                fseek(f,-2L,SEEK_CUR);
                fputc('\n',f);
                fseek(f,1,SEEK_CUR);
            }
        }
    }
    fclose(f);
    return 0;
}