最近在弄文件的传输,基本流程就是:
打开文件->读取文件->传输(scoket模块)
->写入文件->保存.
现在单单看文件操作的部分,弄了我3天时间没想明白,看下面的代码。
为什么打开保存txt就可以,但是其他的文件就不行呢?
FILE *pFile=fopen("D:\\111.doc","r");//之前的乱码系因为当j=lenFile的时候,*sendbuf='0',这样是把sendbuf的第一个字符变0,当然乱码啦.
char *buffer;
fseek(pFile,0,SEEK_END);
int lenFile=ftell(pFile);
buffer=new char[lenFile+1];
int i=0;
for (i=0;i
保存的代码///
FILE *pFile2=fopen("D:\\133.doc","w");
fwrite(buffer,1,lenFile,pFile2);
fclose(pFile2);
继续看孙鑫的《VC++深入详解》,果然看书不要看一半啊,一知半解害死自己。还是不够踏实,太浮躁了!
里面有说文本方式和二进制方式读取文件的区别,系统默认的不是二进制方式读取文件,而是以文本方式打开。所以这就是为什么txt能打开而其他是乱码的原因了。
文件一般分为:二进制文件和文本文件。
文本文件:也被称为ASCII文件,它的每一个字节存放的都是可表示为一个字符的ASCII代码的文件,它是以“行”为基本结构的一种信息组织和储存方式的文件,可用任何文字处理程序阅读的简单文件。
二进制文件:是包含在ASCII及扩展ASCII字符中编写的数据和程序。一般是可执行程序,图像,声音等文件。
这里要强调的是:虽然这里将文件分类了,但实际上,他们的本质都是:文件只是在计算机内存中以二进制表示的数据再外部存储介质的另一种存放形式。对于文本文件来说,它只是一种特殊形式的文件,它所存放的每一个字节都可以转换成一个可读的字符。
所以,上面就很简单啦。
这里: FILE *pFile=fopen("D:\\111.jpg","r");
应该改成:FILE *pFile=fopen("D:\\111.jpg","rb");
其他类似的时候的代码也作相应改动就可以了。。。
呼,困扰了2天的问题搞掂了,好开心。