一个怪异的wave文件合并问题 我合并了10个wave文件,方法使用 Seek把另外9个的语音数据部分合到第一个文件里,当我用 Seek(41, CFile::begin); 时文件是合并完成拉,但是在录音机里放他说我文件已损坏,用其他东西放却是能放出来,改成Seek(41, CFile::current);后,没有上述问题,但是 合并完后 整个文件都是由 第2个文件组成的不知道怎么回事 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 void CSendDlg::OnStop() { CFile f_ReadFile; CFileException e; CString sFileName; for(int i=1;i<10;i++) { sFileName.Format("D:\\wav\\%d.wav",i); long Len=0; if(!f_ReadFile.Open(sFileName,CFile::modeRead, &e)) { //AfxMessageBox("读取源文件出错!"); continue; } Len=f_ReadFile.GetLength(); char* buf; buf=new char[Len]; f_ReadFile.ReadHuge(buf,Len); f_ReadFile.Close(); SaveCompFile(buf,Len); delete []buf; } AfxMessageBox("文件保存完毕!");}BOOL CSendDlg::SaveCompFile(char *ReadBuf,long Len){ CString fCompFile_name="D:\\wav\\CompFile.wav"; long fLen=0; //CompFile 文件的长度 long FileSize=0; //两个文件合并起来后的长度 char * NewBuf; CFile fReadCompFile; CFileException e; if(fReadCompFile.Open(fCompFile_name,CFile::modeRead, &e)) { fLen=fReadCompFile.GetLength(); FileSize=fLen+(Len-44); NewBuf=new char[Len-44]; if(!NewBuf) { AfxMessageBox("NewBuf 出错拉"); } CopyMemory(NewBuf,&ReadBuf[44],Len-44); fReadCompFile.Close(); } else //如果MeetingFile.wav是第一次被生成 { CFile fCompFile(fCompFile_name, CFile::modeCreate | CFile::modeWrite); DWORD dwNum =Len; fCompFile.Write(ReadBuf,dwNum); fCompFile.Close(); return true; } CFile fCpFile; if(!fCpFile.Open(fCompFile_name,CFile::modeRead|CFile::modeWrite,&e)) AfxMessageBox("错误了"+e.m_cause); //文件长度 fCpFile.Seek(4,CFile::begin); DWORD dwFileSize=FileSize*2; fCpFile.Write(&dwFileSize, sizeof(dwFileSize)); //数据长度 fCpFile.Seek(41, CFile::begin); DWORD dwDataSize=FileSize-44; fCpFile.Write(&dwDataSize, sizeof(dwDataSize)); DWORD dwNum =Len-44; fCpFile.SeekToEnd(); fCpFile.Write(NewBuf,dwNum); fCpFile.Close(); delete []NewBuf; return true;}不知道这么写有没有什么问题,大家给我看看 关于listctrl的问题 如何实现浮动许可证机制 鼠标钩子 关于子类化问题 写中文到文本的时候出现乱码, 如何解决? [急]不用MFC,如何实现ToolTips? 关于错误: Cannot open precompiled header file: 'Debug/adomfc1.pch' _______高手快来呀!!!如何在Service中调用GetActiveObject得到当前用户的ROT 类里面调用模板类不正确 如何获取QQ聊天窗口(DirectUI)的光标处文字 除法电路: 时间复杂度问题
{
CFile f_ReadFile;
CFileException e;
CString sFileName;
for(int i=1;i<10;i++)
{ sFileName.Format("D:\\wav\\%d.wav",i);
long Len=0;
if(!f_ReadFile.Open(sFileName,CFile::modeRead, &e))
{
//AfxMessageBox("读取源文件出错!");
continue;
}
Len=f_ReadFile.GetLength();
char* buf;
buf=new char[Len];
f_ReadFile.ReadHuge(buf,Len);
f_ReadFile.Close();
SaveCompFile(buf,Len);
delete []buf;
}
AfxMessageBox("文件保存完毕!");
}
BOOL CSendDlg::SaveCompFile(char *ReadBuf,long Len)
{
CString fCompFile_name="D:\\wav\\CompFile.wav";
long fLen=0; //CompFile 文件的长度
long FileSize=0; //两个文件合并起来后的长度 char * NewBuf;
CFile fReadCompFile;
CFileException e; if(fReadCompFile.Open(fCompFile_name,CFile::modeRead, &e))
{
fLen=fReadCompFile.GetLength();
FileSize=fLen+(Len-44); NewBuf=new char[Len-44];
if(!NewBuf)
{
AfxMessageBox("NewBuf 出错拉");
}
CopyMemory(NewBuf,&ReadBuf[44],Len-44); fReadCompFile.Close();
}
else //如果MeetingFile.wav是第一次被生成
{
CFile fCompFile(fCompFile_name, CFile::modeCreate | CFile::modeWrite);
DWORD dwNum =Len;
fCompFile.Write(ReadBuf,dwNum);
fCompFile.Close();
return true;
} CFile fCpFile;
if(!fCpFile.Open(fCompFile_name,CFile::modeRead|CFile::modeWrite,&e))
AfxMessageBox("错误了"+e.m_cause); //文件长度
fCpFile.Seek(4,CFile::begin);
DWORD dwFileSize=FileSize*2;
fCpFile.Write(&dwFileSize, sizeof(dwFileSize)); //数据长度
fCpFile.Seek(41, CFile::begin);
DWORD dwDataSize=FileSize-44;
fCpFile.Write(&dwDataSize, sizeof(dwDataSize));
DWORD dwNum =Len-44;
fCpFile.SeekToEnd();
fCpFile.Write(NewBuf,dwNum);
fCpFile.Close();
delete []NewBuf; return true;
}不知道这么写有没有什么问题,大家给我看看