是否有一种方法可以解决Delphi中的I / O错误6?

问题描述 投票:-1回答:1
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”错误,并且没有任何显示。我不知道它与文本文件有关,还是与显示过程有关。

delphi delphi-xe2 delphi-xe
1个回答
2
投票

您的代码有很多问题,但是特别是关于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可能来自此。

该行需要改为以下内容:

System.Eof()

© www.soinside.com 2019 - 2024. All rights reserved.