martes, septiembre 11, 2012

Freepascal y Lazarus: existe el fichero?


Función FileExists

FileExists nos indicar si un fichero existe o no. Pero OJO, busca en el mismo directorio que el ejecutable del programa.

He creado un formulario en Lazarus. Le he agregado un botón, y este es el código que se ejecuta cuando hacemos clic en él:


procedure TfrmPrincipal.btnIniciarClick(Sender: TObject);
type Tprogramas = Array[0..2] of string;
var
   prog : Tprogramas;
   s : string;
   fichero : Text;
begin
    prog[0]:='toad.exe';
    prog[1]:='gpg.exe';
    prog[2]:='r.exe';
    system.Assign(fichero,'programas.txt');
    Rewrite(fichero);
    for s in prog do begin
        if FileExists(s) then begin
           Writeln(fichero, s);
        end
    end;
    system.Close(fichero);
end;

¿Por qué he puesto system.Assign en lugar de invocar Assign a secas?

Assign asigna un nombre a un fichero.

Si ponemos Assign(fichero,'programa.txt') nos saldrá el siguiente error de compilación:
ERROR: Wrong number of parameters specified for call to "Assign".

El problema es que el compilador interpreta que queremos utilizar el método Assign de la clase del formulario (TfrmPrincipal en mi caso). Se soluciona indicando que llamamos al método Assign de la clase System: System.Assign.

Lo mismo ocurre con System.Close.

Saludos.

1 comentario:

Erick dijo...

Gracias, voy a probarlo.