File Delphi I/O错误103
因此,我试图登录一个程序,该程序只需在文本文件中检查ID(用户名)和密码,但我得到了这个代码的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
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