fileseek(libfile,0,2)是不是到文件尾啊?
那么文件的打开方式要注意了
另一个贴子在哪儿?

解决方案 »

  1.   

    procedure TForm1.Button2Click(Sender: TObject);
    Var
      //libfile:File;
      i:integer;
      //wavlib:file;
      libtxt:TextFile;
      buff:array [1..10000] of char;
      ch,line:String;
      pfile:Dword;
    begin
      libfile:=fileOpen('soundlib.lib',fmOpenWrite);
      if libfile<0 then 
        libfile:=fileCreate('soundlib.lib');
      AssignFile(libtxt,'wenming.txt');
      //ReWrite(libFile,1);
      ReWrite(libtxt);
      fileWrite(libfile,buff,sizeof(buff));
      for i:=0 to form1.listbox1.Items.count-1 do
      begin
        addwav(ExpandfileName(listbox1.items[i]),i);
      //  MessageDlg('文件已经添加!', mtWarning,[mbOK],0);
        ch:=Format('%d',[i]);
        Line:=ch+'.  '+ListBox1.Items[I];
        Writeln(libtxt,Line);
      end;
      pfile:=fileseek(libfile,0,2);
      fileseek(libfile,5*i,0);
      filewrite(libfile,pfile,4);  CloseFile(libtxt);
      FileClose(libFile);
    end;procedure Tform1.addwav(FileName:string;i:integer);
    var
      fsize:longint;//存放语音数据长度
      wavfile:integer;//file;WAV类型文件
      pfile:DWord;//定义文件指针
      Buffer:pchar; //byte;
      by:byte;//用来指向PFILE,把文件指针位置写入TEXTFILE件
      y:integer;
      ch:char;
      BytesRead: Integer;begin
      //AssignFile(wavfile,filename);
      //Reset(wavfile);
      try
      wavfile:=fileopen(Filename,fmOpenRead);
      fsize:=fileseek(wavfile,0,2);//fileseek(wavfile,0,2);
      fsize:=fsize-2129;//0x0851;
      label4.caption:=inttostr(fsize);
      fileSeek(wavfile,90,0);
      //GetMem(buffer,fsize+1);
      Buffer:=pchar(AllocMem(fsize + 1)); bytesread:=fileRead(wavfile,buffer,fsize);//得到了WAV文件中语音数据存放与FILEBUF中
      fileClose(wavfile);//关闭文件   pfile:=fileSeek(libfile,0,2); //得到文件指针位置
      //pfile:=fileseek(libfile,0,1);   y:=5*i; //得到第i个指针应计入的地址  fileSeek(libfile,y,0);
      filewrite(libfile,pfile,4);
        //ch:=chr(13);//回车符
       //label2.caption:=ch;
      filewrite(libfile,ch,1);  fileseek(libfile,0,2);
      //label2.caption:=inttostr(y);
      //for i:=0 to BytesRead-1 do
        fileWrite(libfile,buffer,fsize);//把语音数据写到库中!
        
      end;
    end;
      

  2.   

    libfile 我在函数外定义的,是integer
      

  3.   

    这个程序的功能是,将几个wav文件加入到一个文件中,播放时输入编号寻址
    libtxt是个文本文件,用来存放编号与文件名的对照
      

  4.   

    在vc中我已经实现,但现在需要将其转化到delphi中,我用了三天也没办到,大家帮我看看吧。下面是vc中实现上面功能的代码
    CFile libfile;//文件类型用来创建语音库
    CFile textfile;//生成语音索引说明文件
    void addwav(CString FileName,int i)
    {
    long filesize;//存放语音数据长度
    CFile wavfile;//WAV类型文件
    DWORD pfile;//定义文件指针
    BYTE filebuf[409600];//存放单个WAV文件数据
    BYTE *by;//用来指向PFILE,把文件指针位置写入TEXTFILE件
    wavfile.Open(FileName,CFile::modeRead);
    filesize=wavfile.GetLength();
    filesize-=0x0851;
    wavfile.Seek(90,CFile::begin);
    wavfile.Read(filebuf,filesize);//得到了WAV文件中语音数据存放与FILEBUF中
    wavfile.Close();//关闭文件
    ///////////
    libfile.SeekToEnd();
    pfile=libfile.GetPosition();//得到文件指针位置
    by=(BYTE*)(&pfile);
    long y=5*i;
    libfile.Seek(y,CFile::begin);
    libfile.Write(by,4);//写文件头,指向语音数据
    CString s='\n';//写入回车字符
    libfile.Write(s,1);
    libfile.SeekToEnd();
    libfile.Write(filebuf,filesize);//把语音数据写到库中!

    CString s1;
    s1.Format("%d   ",i);//把写入语音库中的语音数据,及其索引号写入TEXT中
    textfile.SeekToEnd();
    textfile.Write(s1,s1.GetLength());
    CString s2;
    s2=FileName;
    textfile.Write(s2,s2.GetLength());
    s="\r\n";
    textfile.Write(s,3);
    // i=i+1;//假如还有文件,文件数加一,重新进入循环} void CFilelibDlg::OnButton1() 
    { // TODO: Add your control notification handler code here 
    // int i=0;//定义文件WAV数目
    libfile.Open(".\\text.lib",CFile::modeWrite|CFile::modeCreate,NULL); textfile.Open(".\\text.txt",CFile::modeWrite|CFile::modeCreate,NULL);

    BYTE *buf = (BYTE * )new char[10000];
    libfile.SeekToBegin();
    libfile.Write(buf,10000);//生成文件,并留出文件头!
    CString FileName;

    for(int i=1;i<10;i++)
    {
          FileName.Format("%d",i);
      FileName=FileName+".wav";
      addwav(FileName,i);
    }
    libfile.SeekToEnd();
    DWORD pfile;
    pfile=libfile.GetPosition();
    BYTE *by;
    by=(BYTE*)(&pfile);//得到语音库结束处指针
    long y=5*i;
    libfile.Seek(y,CFile::begin);
    libfile.Write(by,4);//写文件头

    //为填加库在文件结尾处写入文明用语数目
    DWORD SentenceNum;
    SentenceNum=(DWORD)i;
    BYTE *sn;
    sn=(BYTE*)(&SentenceNum);
    libfile.SeekToEnd();
    libfile.Write(sn,4); 
    //关闭这两个文件
    textfile.Close();
    libfile.Close();
    //::SetCurrentDirectory(CurPath);//恢复进程当前目录
    }
      

  5.   

    当然不算,我用delphi才两周,连基本的东西很多还搞不清!