在我的程序中,用户填写表单,然后按提交。然后,创建文本文件或随机扩展文件,其中写入所有用户的信息。因此,每当用户运行应用程序表单时,它将检查是否存在具有所有信息的文件,然后复制信息并将其粘贴到表单中。但是,由于某种原因它没有工作(没有语法错误):
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;
该文件存在,但显示消息File not found
。我不明白。
答案 0 :(得分:5)
我冒昧地为您格式化代码。你看到了差异(before,after)吗?另外,如果我是你,我会更好地命名控件。您可以使用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]);
您忘了指定文件f
!
此外,在我格式化代码之前,程序的最终end
丢失了。您的实际代码中的块可能不正确,因此即使文件存在,也会显示ShowMessage
? (正确格式化代码的另一个原因......)
如果我遇到这个问题并想进行一些快速调试,我会插入
ShowMessage(BoolToStr(FileExists(filedest), true));
Exit;
在行
之后filedest := ...
只是为了查看FileExists(filedest)
的返回值是什么。 (当然,您也可以设置断点并使用调试器。)
如果你得到false
,你可能想知道世界上filedest
实际上包含什么:好吧,用这个替换上面的'调试代码':
ShowMessage(filedest);
Exit;
然后使用Windows资源管理器(或者更好的是:命令提示符)来查看文件是否真的存在。
答案 1 :(得分:2)
我想提一下输出调试消息的另一种可能性(假设我们还不知道如何操作真正的调试器):
{ ... }
filedest := ExtractFilePath(ParamStr(0)) + 'User\Identity\IdentityofMyself.txt';
AllocConsole; // create console window (uses Windows module) - required(!)
WriteLn('"' + filedest + '"'); // and output the value to verify
if FileExists(filedest) then
{ ... }