还在使用linux 自带的系统函数 fread 、fwrite么? 考虑一下使用C++ 的ifstream、ofstream 一套代码,多平台运行,解放需要使用宏定义做平台区分读写的麻烦。
- ios::in 读文件
- ios::out 写文件(覆盖写)
- ios::binary 二进制方式
- ios::app 追加写(要配合out使用)
- ios::trunc 覆盖写(要配合out使用)
- ios::out | ios::binary 二进制写
#include <iostream>#include <fstream>
#include <string.h>
using namespace std;
int main ()
{
// 读取文件
filebuf* pbuf;
ifstream filestr;
int size;
char* buffer;
char* bufferTmp;
// 采用二进制方式打开
filestr.open("in.pcm", ios::binary);
if (!filestr.is_open())
{
cout << "in file open failed !"<<endl;
return -1;
}
// 获取filestr对应buffer对象的指针
pbuf = filestr.rdbuf();
// 调用buffer对象方法获取文件大小
size = pbuf->pubseekoff(0, ios::end, ios::in);
pbuf->pubseekpos(ios::beg, ios::in);
// 加载文件中数据到内存
buffer = new char[size];
memset(buffer, 0, size);
pbuf->sgetn(buffer, size);
// 业务逻辑,可对内存数据自行进行修改
int sizeout = size * 1.5;
bufferTmp = new char[sizeout];
memset(bufferTmp, 0, sizeout);
memcpy(bufferTmp, buffer, size);
memcpy(bufferTmp + size, buffer, size * 0.5);
// 打开输出文件
ofstream fileOutPcm;
fileOutPcm.open("out.pcm", ios::binary | ios::out);
if (!fileOutPcm.is_open())
{
cout << "out file open failed !"<<endl;
return -1;
}
// 输出内存数据到文件
fileOutPcm.write(bufferTmp, sizeout) ;
//释放内存、关闭文件句柄
delete []buffer;
buffer = NULL;
delete []bufferTmp;
bufferTmp = NULL;
filestr.close();
fileOutPcm.close();
return 0;
}