想要以二进制的方式读取一个文件。在此,我用的是fopen的方式,方便又直观
1:准备好需要的头文件
因为用到了C的API,应该加上 #include<stdio.h>
2:打开文件
FILE *p = fopen(strSourceFile , "rb");
if(p == nullptr)
AfxMessageBox(_T("文件不存在,打开失败!"));
这种形式是以二进制的方式打开的。
在这里,有个需要注意的是,传入的文件名必须是char* 类型的数据。
如果你传入的数据是CString的,也没有关系,可以用下面的方式进行转换
2.1:类型转换
char* chFilename;
CStringA strFilenameA;
strFilenameA= CT2A(strFilename);
chFilename= strFilenameA.GetBuffer();
strFilenameA.ReleaseBuffer();
其中,chFilename就是转换好的文件名称
3:获取图片文件的长度
int nlength = _filelength(_fileno(p)); //得到图像的长度
4:开辟一块区域用来存储数据
因为要给原来的数据增加 头数据、尾数据,所以,申请的内存应该比以前的多两个
int nLen = nlength + 3;
unsigned char* a = new unsigned char[nLen];
开始位置增加一个头数据
a[0]=0x88;
我就以增加一个16进制数据作为例子
5:读取图片文件中的内容
fread(a+1, sizeof(unsigned char),nlength,p);
因为在开始的位置增加了一位,所以,当我们读取图片文件中的数据时,需要从第一位开始(位置发生了偏移)。
在尾部增加一个尾数据
a[nLen-1]=0x88;
为了简单体现,我也将尾数据设置成了一个16进制数据
6:存储新的数据信息
将修改好的数据信息存到一个新的文件中,也是以二进制的方式。
FILE *q = fopen(strGenerateFile , "wb");
fwrite(a , sizeof(unsigned char) , nLen, q);
fclose(q);
7:释放资源
fclose(p);
delete []a;