我合并了10个wave文件,方法使用 Seek把另外9个的语音数据部分合到第一个文件里,当我用 Seek(41, CFile::begin); 时文件是合并完成拉,但是在录音机里放他说我文件已损坏,用其他东西放却是能放出来,改成Seek(41, CFile::current);后,没有上述问题,但是 合并完后 整个文件都是由 第2个文件组成的不知道怎么回事

解决方案 »

  1.   

    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;
    }不知道这么写有没有什么问题,大家给我看看