delphisaveexists

Save User's Changes or other User's Information / Notes


In my program, the user completes a form and then presses Submit. Then, a textfile or a random extension file is created, in which all the user's information is written. So, whenever the user runs the application form, it will check if the file, which has all the information, exists, then it copies the information and pastes it to the form. However, it is not working for some reason (no syntax errors):

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;

The file exists, but it shows the message File not found. I don't understand.


Solution

  • I took the liberty of formatting the code for you. Do you see the difference (before, after)? Also, if I were you, I would name the controls better. Instead of Edit1, Edit2, Edit3 etc. you could use eFirstName, eLastName, eEmailAddr, etc. Otherwise it will become a PITA to maintain the code, and you will be likely to confuse e.g. ComboBox7 with ComboBox4.

    One concrete problem with your code is this line:

    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]);  
    

    You forgot to specify the file f!

    Also, before I formatted your code, the final end of the procedure was missing. Maybe your blocks are incorrect in your actual code, so that ShowMessage will be displayed even if the file exists? (Yet another reason to format your code properly...)

    If I encountered this problem and wanted to do some quick debugging, I'd insert

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

    just after the line

    filedest := ...
    

    just to see what the returned value of FileExists(filedest) is. (Of course, you could also set a breakpoint and use the debugger.)

    If you get false, you probably wonder what in the world filedest actually contains: Well, replace the 'debugging code' above with this one:

    ShowMessage(filedest);
    Exit;
    

    Then use Windows Explorer (or better yet: the command prompt) to see if the file really is there or not.