procedure TfrmSongs.Display;
var
i: Integer;
begin
redOutput.Clear;
redOutput.Lines.Add('The TOP 10');
for i := 1 to iCount-1 do
begin
redOutput.Lines.Add(IntToStr(i)+arrSongs[i]);
end;
end;
procedure TfrmSongs.FormActivate(Sender: TObject);
var
tSongList: TextFile;
sSong: string;
begin
iCount := 0;
AssignFile(tSongList, ExtractFilePath(Application.ExeName)+'Songs.txt');
Reset(tSongList);
while not EOF do
begin
Readln(tSongList, sSong);
arrSongs[iCount] := sSong;
Inc(iCount);
end;
CloseFile(tSongList);
Display;
end;
我正在尝试通过富文本编辑显示通过文本文件创建的数组。但是,每次我运行该应用程序时,都会出现“ I / O错误6”错误,并且没有任何显示。我不知道它与文本文件有关,还是与显示过程有关。
您的代码有很多问题,但是特别是关于I / O错误,错误6表示“文件句柄无效”。
由于收到弹出错误通知,因此您显然已启用I/O checking,默认情况下为启用。
I / O错误6在System.Reset()
上失败通常不常见,并且您没有看到与打开文件失败有关的任何其他类型的错误,因此我们可以放心地假设文件已成功打开,并且System.Reset()
和System.Readln()
没有被传递无效的I / O句柄。
因此只剩下一行可能接收到无效的I / O句柄:
System.Readln()
System.CloseFile()
具有一个可选参数来告诉它要检查哪个文件。由于省略了该参数,因此System.CloseFile()
将改为使用while not EOF do
。并且GUI进程没有默认分配的STDIN句柄。因此,错误6可能来自此。
该行需要改为以下内容: