use*_*565 -2 delphi exists save
在我的程序中,用户完成一个表单然后按下Submit.然后,创建文本文件或随机扩展文件,其中写入所有用户的信息.因此,每当用户运行应用程序表单时,它将检查是否存在具有所有信息的文件,然后复制信息并将其粘贴到表单中.但是,它由于某种原因不起作用(没有语法错误):
procedure TForm1.FormCreate(Sender: TObject);
var
filedest: string;
f: TextFile;
info: array[1..12] of string;
begin
filedest := ExtractFilePath(ParamStr(0)) + 'User\Identity\IdentityofMyself.txt';
if FileExists(filedest) then
begin
AssignFile(f,filedest);
Reset(f);
ReadLn(info[1], info[2], info[3], info[4], info[5], info[6], info[7],
info[8], info[9], info[10], info[11], info[12]);
Edit1.Text := info[1];
Edit2.Text := info[2];
ComboBox1.Text := info[3];
ComboBox5.Text := info[4];
ComboBox8.Text := info[4];
ComboBox6.Text := info[5];
ComboBox7.Text := info[6];
Edit3.Text := info[7];
Edit4.Text := info[8];
Edit5.Text := info[11];
Edit6.Text := info[12];
ComboBox9.Text := info[9];
ComboBox10.Text := info[10];
CloseFile(f);
end
else
begin
ShowMessage('File not found');
end;
end;
Run Code Online (Sandbox Code Playgroud)
该文件存在,但它显示该消息File not found.我不明白.
我冒昧地为你格式化代码.你看到了差异(之前,之后)?另外,如果我是你,我会更好地命名控件.相反的Edit1,Edit2,Edit3等你可以使用eFirstName,eLastName,eEmailAddr等,否则就会成为PITA维护的代码,你将有可能混淆如ComboBox7用ComboBox4.
您的代码的一个具体问题是这一行:
readln(info[1], info[2], info[3], info[4], info[5], info[6], info[7],
info[8], info[9], info[10], info[11], info[12]);
Run Code Online (Sandbox Code Playgroud)
你忘了指定文件f!
此外,在我格式化代码之前,end程序的最后一个缺失.您的实际代码中的块可能不正确,因此ShowMessage即使文件存在也会显示?(正确格式化代码的另一个原因......)
如果我遇到这个问题并想做一些快速调试,我会插入
ShowMessage(BoolToStr(FileExists(filedest), true));
Exit;
Run Code Online (Sandbox Code Playgroud)
就行了
filedest := ...
Run Code Online (Sandbox Code Playgroud)
只是为了看看返回的值FileExists(filedest)是什么.(当然,您也可以设置断点并使用调试器.)
如果你得到了false,你可能想知道世界上filedest究竟包含了什么:好吧,用上面这个替换上面的'调试代码':
ShowMessage(filedest);
Exit;
Run Code Online (Sandbox Code Playgroud)
然后使用Windows资源管理器(或者更好的是:命令提示符)来查看文件是否真的存在.