菜鸟的给分问题 fileseek(libfile,0,2)是不是到文件尾啊?那么文件的打开方式要注意了另一个贴子在哪儿? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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; libfile 我在函数外定义的,是integer 这个程序的功能是,将几个wav文件加入到一个文件中,播放时输入编号寻址libtxt是个文本文件,用来存放编号与文件名的对照 在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);//恢复进程当前目录 } 当然不算,我用delphi才两周,连基本的东西很多还搞不清! 如何获取服务器的日期 帮忙下 谢谢 新手1756 如何把DCU 转成pas 控件制作问题 求助:一个窗体关闭的小问题 在Delphi 7中用ADOConnection控件连接Oracle 9i的问题 超级猛料更新 关于DELPHI中向SQL2000中插入记录的问题! 提出一个疑问 (Sender: TObject) Sender到底是什么? 高手救救我:delhpi编写多媒体程序问题 Kingron(WinAPI)兄,你的分还没领 关于文件拷贝的问题
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;
libtxt是个文本文件,用来存放编号与文件名的对照
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);//恢复进程当前目录
}