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上的行为又不一样。楼主遇到这问题了,正是时候百度一下相关信息学习。
------解决思路----------------------
仅供参考
我想把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;
}