不能建立文件?(50分)

M

midier

Unregistered / Unconfirmed
GUEST, unregistred user!
function tform2.player(Playstr:string):boolean;
var TempStream:TMemoryStream;
Strstream:TStringStream;
tempfilename,str:string;
temp:byte;
begin
// result:=false;
MediaPlayer1.close;
temp:=0;
tempfilename:='c:/WINDOWS/TEMP/temp.mid';
if FileExists(tempfilename) then
deletefile(tempfilename);
TempStream:=TMemoryStream.Create;
Strstream:=TStringStream.Create(Playstr);
Strstream.Seek(0,soFromBeginning);
Tempstream.Seek(0,soFromBeginning) ;
repeat
str:=Strstream.ReadString(2);
temp:=strtoint('0x'+str);
TempStream.Write(temp,1);
until (TempStream.Position>=(length(Playstr) div 2));
TempStream.SaveToFile(tempfilename);
TempStream.Free ;
Strstream.free;
MediaPlayer1.TimeFormat :=tfTMSF;
MediaPlayer1.FileName :=tempfilename;
MediaPlayer1.DeviceType:=dtAutoSelect;
MediaPlayer1.Open;
MediaPlayer1.Play;
Timer1.Interval :=200;
Timer1.Enabled :=true;
result:=true;
end;

当我连续两次运行Player()函数,第二次会出现“不能建立‘c:/WINDOWS/TEMP/temp.mid’”
文件?
 
>不能建立文件?
Player()函在子窗体Form2上;当我运行Form1的按钮N时,打开Form2调用Player()函数
,Player()运行结束后,关闭form2;继续运行form1的按钮N,再次打开form2,还是调用
player(),这是出现“can not create file 'c:/WINDOWS/TEMP/temp.mid'”?
 
>不能建立文件?
我在form1上也有类似的程序,不会出错?

 
当你在Form2上Player时,调用了MediaPlayer1.Open,但是窗口关闭时没有MediaPlayer1.Close
而第二次打开Form2时已经是另一个MediaPlayer1了,虽然你之前调用了MediaPlayer1.Close
但并没有并闭上一次打开的MediaPlayer1,所以此时 不能创建文件!你可以在Form2的OnClose中调用MediaPlayer1.Close
试试!
 
检查一下 deletefile(tempfilename); 的返回值不就知道了?

if not deletefile(tempfilename) then
ShowMessage('被独占打开!');

然后再做响应处理,如查找被何处锁定等
 
删除是有时间差的,连续点击就可能导致问题.最好还是每次用GetTempFileName
申请个临时文件吧.
 
接受答案!
 
多人接受答案了。
 

Similar threads

X
回复
5
查看
2K
吴剑明
顶部