WriteLn Catching on Delphi Seattle

3

I'm having a problem where when passing through the function write it ends up locking inside the function, and does not return anything, having to close the application and open again, below the code for test, just create a project and paste the code in FormCreate:

procedure TForm1.FormCreate(Sender: TObject);
var
  F        : TextFile;
  mArquivo,s : String;
  i: integer;
begin
   {$i+}
   mArquivo :=  'C:\Users\Rodrigo\Desktop\teste.txt';
   AssignFile(F,mArquivo);

   if FileExists(mArquivo) then
      DeleteFile(mArquivo);

   Rewrite(F,mArquivo);
   Append(F);

   for i := 0 to 10 do
   begin
      S := 'Text'+ IntToStr(i);
      Write(F,S);
   end;
   CloseFile(F);
end;
    
asked by anonymous 01.03.2017 / 15:45

2 answers

2

As discussed, just remove the m File parameter from the ReWrite function and it will work.

    
01.03.2017 / 16:02
6

Reviewed the code found.

procedure TForm1.FormCreate(Sender: TObject);
var
  F        : TextFile;
  mArquivo,s : String;
  i: integer;
begin
   {$i+}
   mArquivo :=  'C:\Users\Rodrigo\Desktop\teste.txt';
   AssignFile(F,mArquivo);

   // Se você vai usar o rewrite abaixo então não tem
   // sentido fazer isso aqui.   
   if FileExists(mArquivo) then
      DeleteFile(mArquivo);

   // O rewrite cria o arquivo e, caso ele exista, vai apaga-lo
   // e recriar um novo.

   Rewrite(F,mArquivo); // Erro

   // Append serve para você abrir um arquivo e adicionar novas linhas a  
   // a ele. Aqui é totalmente desnecessário. 
   Append(F);

   for i := 0 to 10 do
   begin
      S := 'Text'+ IntToStr(i);
      // Isso, claro, deveria ser WriteLn
      Write(F,S);
   end;
   CloseFile(F);
end;

Rewriting.

procedure TForm1.FormCreate(Sender: TObject);
var
  F        : TextFile;
  mArquivo,s : String;
  i: integer;
begin
   {$i+}
   mArquivo :=  'C:\Users\Rodrigo\Desktop\teste.txt';
   AssignFile(F,mArquivo);

   // Como a variavel F é um textFile então rewrite tem apenas um parametro
   Rewrite(F);

   for i := 0 to 10 do
   begin
      S := 'Text'+ IntToStr(i);
      WriteLn(F,S);
   end;
   CloseFile(F);
end;
    
01.03.2017 / 17:13