简单读写文件函数

工作中常常要在程序中,用指令开启 读文件测试 或 写文件测试,比如说读指定文件数据用于播放,或将采集数据保存下来!

// 读文件
void ReadPcm(u8* pBuf, u32 dwSize)
{
	static FILE* pf = NULL;

	//=============================================
	if (pBuf == NULL || dwSize == 0)
	{
		SAFE_FCLOSE(pf);
		return;
	}

	//=============================================
	if (pf == NULL)
	{
		pf = fopen("/data/test0.pcm", "rb");
		if (pf == NULL)
		{
			CodecPrint("fopen( /data/test0.pcm ) fail\n\r");
			return;
		}
	}

	//=============================================
	fread(pBuf, 1, dwSize, pf);
	if (feof(pf))
	{
		fseek(pf, 0, SEEK_SET);//文件位置指针回复到开始位置,丢弃文件末尾不足一帧的数据
		fread(pBuf, 1, dwSize, pf);
	}
}

//=============================================
//循环读文件数据 给播放
int main()
{
	while(1)
	{
		memset(tPly.pAudData, 0, tPly.dwDataLen);
		
		if (g_dwEpLogonMask == 6)
		{
			ReadPcm(tPly.pAudData, tPly.dwDataLen);//读文件数据
		}
		else
		{
			ReadPcm(NULL, 0);//结束读文件
		}
		
		DealAudPly(tPlyHost.pAudData, tPlyHost.dwDataLen);
	}
	
	return 0;
}

//写文件
u32 WriteToFile(u8* pData, u32 dwSize)
{
	static FILE* pf = NULL;

	//=============================================
	if (pData == NULL || dwSize == 0)
	{
		//SAFE_FCLOSE(pf);
		if (NULL != pf)
		{
			fclose(pf);
			pf = NULL;

			MPrintf("/data/local/tmp/test.pcm --- end\n\r");
		}
		return 0;
	}

	//=============================================
	if (pf == NULL)
	{
		pf = fopen("/data/local/tmp/test.pcm", "wb");
		if (pf == NULL)
		{
			MError("fopen( /data/local/tmp/test.pcm ) fail\n\r");
			return 1;
		}
		MPrintf("/data/local/tmp/test.pcm --- start\n\r");
	}

	//=============================================
	fwrite(pData, 1, dwSize, pf);

	return 0;
}

//=============================================
//保存采集数据到文件
int main()
{
	while(1)
	{
		DealAudCap(tCap.pAudData, tCap.dwDataLen);
		
		if (g_dwLogonMask == 459)
		{
			WriteToFile(tCap.pAudData, tCap.dwDataLen);//保存采集数据
		}
		else if (g_dwLogonMask == 0)
		{
			WriteToFile(NULL, 0);//结束保存
		}	
	}
	
	return 0;
}


你可能感兴趣的:(C/C++,c语言)