File Delphi I/O错误103

File Delphi I/O错误103,file,delphi,delphi-2010,File,Delphi,Delphi 2010,因此,我试图登录一个程序,该程序只需在文本文件中检查ID(用户名)和密码,但我得到了这个代码的I/O错误103,我不知道为什么。我在一个非常基本的德尔福水平,所以很抱歉的坏代码等 procedure TfrmLogin.btnLoginClick(Sender: TObject); var ID, Password: String; PATLogins: TextFile; checkpass, checkID: String; correctpass, correctI

因此,我试图登录一个程序,该程序只需在文本文件中检查ID(用户名)和密码,但我得到了这个代码的I/O错误103,我不知道为什么。我在一个非常基本的德尔福水平,所以很抱歉的坏代码等

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;

在文件打开之前,您正在关闭该文件<代码>分配文件不会打开任何文件。它只设置给定的
TextFile
变量,以便将来的文件操作(如
Reset
Rewrite
)知道使用哪个文件名。删除第一个
CloseFile
调用-即使用
AssignFile
后立即调用的调用

不要删除所有的
CloseFile
调用,因为您显然希望处理同一个文件两次。您需要关闭并重新打开该文件,以使其正常工作,这是您当前的代码已经正确执行的操作


(您真的不想处理该文件两次。您当前的算法允许提供任何用户名或密码作为用户名,也可以提供任何密码或用户名作为密码。这意味着没有人需要密码,因为用户名可以作为密码。您需要重新考虑如何进行身份验证,b但这超出了这个问题的范围。)

您的Delphi版本是什么?您读取文件的方式已经过时了大约20年了
103文件未打开
:由以下函数报告:关闭、关闭文件、读、写、查找、EOf、文件POS、文件大小、刷新、块读和块写(如果文件未打开)。请尝试Web搜索。这一点在这里和其他地方已经讨论过ewhere@Arioch'theDelphi2010