所以我试图登录一个程序,它只是通过一个文本文件检查ID(用户名)和密码,但我得到了这个代码的I / O错误103,我无法弄清楚为什么。我处于一个非常基本的delphi级别,对于糟糕的代码等感到抱歉
procedure TfrmLogin.btnLoginClick(Sender: TObject);
var
ID, Password: String;
PATLogins: TextFile;
checkpass, checkID: String;
correctpass, correctID: Boolean;
begin
ID:= edtID.Text;
Password:= edtPassword.Text;
correctID:= False;
correctpass:= False;
AssignFile(PATLogins, 'PATLogins.txt');
CloseFile(PATLogins);
Reset(PATLogins);
while ((NOT EOF(PATLogins)) OR (checkID = ID)) do
begin
ReadLn(PATLogins, checkID);
end;
if (checkID = ID) then
begin
correctID:= True;
end;
if EOF then
begin
ShowMessage('Incorrect ID');
edtID.Clear;
end;
CloseFile(PATLogins);
reset(PATLogins);
while ((NOT EOF(PATLogins)) OR (checkpass = Password)) do
begin
ReadLn(PATLogins, checkpass);
end;
if (checkpass = Password) then
begin
correctpass:= True;
end;
if EOF then
begin
ShowMessage('Incorrect Password');
edtPassword.Clear;
end;
CloseFile(PATLogins);
if (correctID = True) AND (correctpass = True) then
begin
frmLogin.Close;
end;
end;
答案 0 :(得分:7)
您正在关闭文件,然后才会打开它。 AssignFile
不会打开任何文件。它只是设置给定的TextFile
变量,以便将来的文件操作(如Reset
或Rewrite
)知道要使用哪个文件名。在您使用CloseFile
后立即删除第一个AssignFile
电话。
请勿删除所有 CloseFile
次来电,因为您显然希望两次处理同一个文件。您需要关闭并重新打开该文件才能正常工作,这正是您当前的代码已正确执行的操作。
( 用户名和任何密码或用户名都可以作为密码提供。这意味着没有人需要密码,因为用户名可以作为密码提供。你需要重新思考如何进行身份验证,但这超出了此问题的范围。)