Delphi I / O错误103

时间:2016-10-17 17:11:07

标签: file delphi delphi-2010

所以我试图登录一个程序,它只是通过一个文本文件检查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;

1 个答案:

答案 0 :(得分:7)

您正在关闭文件,然后才会打开它。 AssignFile不会打开任何文件。它只是设置给定的TextFile变量,以便将来的文件操作(如ResetRewrite)知道要使用哪个文件名。在您使用CloseFile后立即删除第一个AssignFile电话。

请勿删除所有 CloseFile次来电,因为您显然希望两次处理同一个文件。您需要关闭并重新打开该文件才能正常工作,这正是您当前的代码已正确执行的操作。

用户名和任何密码或用户名都可以作为密码提供。这意味着没有人需要密码,因为用户名可以作为密码提供。你需要重新思考如何进行身份验证,但这超出了问题的范围。)