关于网友提出的“ 100分,写文本文件的问题。”问题疑问,本网通过在网上对“ 100分,写文本文件的问题。”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 100分,写文本文件的问题。描述:
var
afile:textfile;
fname;string;
if strexcel<>'' then begin
tempdialog := tsavedialog.Create(nil);
tempdialog.Filter:='*.txt|*.txt';
tempdialog.Execute;
fname:=tempdialog.FileName;
if copy(fname,strlen(pchar(fname))-4,3)<>'txt' then fname:=fname+'.txt';
showmessage(fname);
if not FileExists(fname) then filecreate(fname);
assignfile(afile,fname);//这里出错
reset(afile);
append(afile);
writeln(afile,strexcel);
flush(afile);
closefile(afile);
shellexecute(0,'Open',pchar(fname),nil,nil,1);
end;
上面的代码执行时老是说什么I/O错误,停在 assignfile(afile,fname);这句
怎么搞,
解决方案1:
这么写试试:
assignfile(afile,fname);
if FileExists(fname) then rewrite(afile)
else append(afile);
writeln(afile,strexcel);
closefile(afile);
shellexecute(0,'notepad.exe',pchar(fname),nil,nil,1);
同意yjbnew(yjbnew)
Reset是只读方式
Rewrite才是读写方式
reset(afile)
去掉看看
//我对你的程序的逻辑真的好头疼!!!
procedure TForm1.BitBtn1Click(Sender: TObject);
var
afile:textfile;
fname:string;
strexcel:String;
tempdialog:Tsavedialog;
begin
strexcel:='ok';
if strexcel<>'' then
begin
tempdialog := tsavedialog.Create(self);
tempdialog.Filter:='*.txt|*.txt';
if tempdialog.Execute then
begin
fname:=tempdialog.FileName;
if copy(fname,strlen(pchar(fname))-4,3)<>'txt' then
fname:=fname+'.txt';
showmessage(fname);//调试完毕最好去掉这句!!!
if not FileExists(fname) then
begin
assignfile(afile,fname);
rewrite(afile);
writeln(afile,strexcel);
closefile(afile);
shellexecute(handle,'Open',pchar(fname),nil,nil,1);
end
else
begin
assignfile(afile,fname);
append(afile);
writeln(afile,strexcel);
closefile(afile);
shellexecute(handle,'Open',pchar(fname),nil,nil,1);
end;
end;
end;
end;
filecreate可以直接看帮助,需要一个句柄,filewrite,fileclose...
问题出在这句话上,
if not FileExists(fname) then filecreate(fname);
用这个创建完文件后,append(afile);就会出错。
改成这样:
//if not FileExists(fname) then filecreate(fname);去掉
assignfile(afile,fname);//这里出错
if not FileExists(fname) then
rewrite(afile) //创建并打开文件
else
append(afile);
//reset(afile); //去掉,这个是只读方式打开
writeln(afile,strexcel);
flush(afile);
closefile(afile);