【问题标题】:Access of violation at address 00404094 with AssignFile();使用 AssignFile() 访问地址 00404094 的违规;
【发布时间】:2015-01-30 05:36:41
【问题描述】:

在几个月没有接触 Delphi 之后,我才刚刚回到 Delphi。只是想让我的头脑清醒一点。

我不断收到AssignFile(); 的访问冲突。我正在做的只是通过文本文件将名称列表读入丰富的编辑中。

procedure TForm1.btn1Click(Sender: TObject);
var
  k : Integer;
  MyArray : array[1..1000] of string;
begin
  k := 1;
  AssignFile(MyFile, 'names.txt');
  Reset(MyFile);
  while not Eof(MyFile) do // <-- Here is the error
    begin
      readln(MyFile, MyArray[k]);
      redOut.Lines.Add(MyArray[k]);
      Inc(k);
    end;
  CloseFile(MyFile);
end;

我记得我在使用 Delphi 时多次发现此错误,但我记得收到错误时没有使用 CloseFile();Reset();

【问题讨论】:

  • 也许您正在读取数组的末尾。数组也是不必要的。一个字符串 var 就足够了。 redOut.Lines.LoadFromFile(...) 替换 Q 中的所有代码。
  • MyFile 也是个谜。我们看不到它是什么或它住在哪里。
  • @DavidHeffernan 我从来不知道LoadFromFile()。我只是想记住我去年从一本糟糕的教科书中学到的东西。我想他们的教学方式不是最好的。他们说在使用AssignFile() 时,您希望它读取的文件应该与项目位于同一文件夹中,或者其他东西(据我记得)。感谢您提供“LoadFromFile()”。使代码更短!
  • 你说问题出在一个函数上,但在你的代码中,你指向了别的东西。复制并粘贴您的真实代码以避免浪费他人的时间(包括您自己的时间)。
  • 没关系。如果有什么不对劲的地方,我们会让你直截了当。

标签: delphi delphi-7


【解决方案1】:

鉴于该代码,很难看出错误的来源。一种可能性是您注销了静态大小的数组的末尾。

根本不需要数组。您可以使用string 类型的单个变量来读取每一行。

不过这样会更容易:

procedure TForm1.btn1Click(Sender: TObject);
begin  
  redOut.Lines.LoadFromFile('names.txt');
end;

【讨论】:

    猜你喜欢
    • 2023-01-29
    • 1970-01-01
    • 2018-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多