-2

在我的程序中,用户填写一个表格,然后按Submit。然后,创建一个文本文件或一个随机扩展文件,其中写入了所有用户的信息。因此,每当用户运行应用程序表单时,它都会检查包含所有信息的文件是否存在,然后复制信息并将其粘贴到表单中。但是,由于某种原因它不起作用(没有语法错误):

procedure TForm1.FormCreate(Sender: TObject);
var
  filedest: string;
  f: TextFile;
  info: array[1..12] of string;
begin
  filedest := ExtractFilePath(ParamStr(0)) + 'User\Identity\IdentityofMyself.txt';

  if FileExists(filedest) then
  begin
    AssignFile(f,filedest);
    Reset(f);

    ReadLn(info[1], info[2], info[3], info[4], info[5], info[6], info[7],
      info[8], info[9], info[10], info[11], info[12]);     

    Edit1.Text := info[1];
    Edit2.Text := info[2];
    ComboBox1.Text := info[3];            
    ComboBox5.Text := info[4];
    ComboBox8.Text := info[4];
    ComboBox6.Text := info[5];
    ComboBox7.Text := info[6];
    Edit3.Text := info[7];
    Edit4.Text := info[8];
    Edit5.Text := info[11];
    Edit6.Text := info[12];
    ComboBox9.Text := info[9];
    ComboBox10.Text := info[10];     

    CloseFile(f);                                           
  end
  else
  begin
    ShowMessage('File not found');
  end;

end;

该文件存在,但它显示消息File not found。我不明白。

4

2 回答 2

5

我冒昧地为您格式化代码。你看到区别(之前之后)吗?另外,如果我是你,我会更好地命名控件。您可以使用, ,等代替Edit1,等。否则它将成为维护代码的 PITA,您可能会与.Edit2Edit3eFirstNameeLastNameeEmailAddrComboBox7ComboBox4

您的代码的一个具体问题是这一行:

readln(info[1], info[2], info[3], info[4], info[5], info[6], info[7],
  info[8], info[9], info[10], info[11], info[12]);  

您忘记指定文件了f

此外,在我格式化您的代码之前,end缺少最后的过程。也许您的块在您的实际代码中不正确,因此ShowMessage即使文件存在也会显示?(正确格式化代码的另一个原因......)

如果我遇到这个问题并想做一些快速调试,我会插入

ShowMessage(BoolToStr(FileExists(filedest), true));
Exit;

就在这条线之后

filedest := ...

只是看看返回的值FileExists(filedest)是什么。(当然,您也可以设置断点并使用调试器。)

如果你得到false,你可能想知道世界上到底filedest包含什么:好吧,用这个替换上面的“调试代码”:

ShowMessage(filedest);
Exit;

然后使用 Windows 资源管理器(或者更好的是:命令提示符)查看文件是否真的存在。

于 2013-05-14T10:01:56.647 回答
2

我想提一下另一种输出调试消息的可能性(假设我们还不知道如何操作真正的调试器):

  { ... }
  filedest := ExtractFilePath(ParamStr(0)) + 'User\Identity\IdentityofMyself.txt';

  AllocConsole;                   // create console window (uses Windows module) - required(!)
  WriteLn('"' + filedest + '"');  // and output the value to verify

  if FileExists(filedest) then
  { ... }
于 2013-05-14T10:25:55.857 回答