Apertura segura de un archivo.


Aquí veremos cómo se hace una apertura de archivo tratando de contemplar los dos casos posibles, esto es, el archivo se pudo abrir sin problemas o debe crearse antes de usarlo.

program openarch;
uses crt, defin; { Notar la llamada a la unidad defin }
{ Abre el archivo si ya existe }
procedure AbrirArchivo(var A:TFileOfRegistro; NF:String);
begin
  Assign(A, NF);
  {$i-}
  Reset(A);
  {$i+}
  UltimoError:=IOResult;
end; { AbrirArchivo }
{ Crea el archivo porque no existe }
procedure CrearArchivo(var A:TFileOfRegistro; NF:String);
begin
  Assign(A, NF);
  {$i-}
  Rewrite(A);
  {$i+}
  UltimoError:=IOResult;
end; { CrearArchivo }
begin
  clrscr; { borra la pantalla }
  if not ExisteArchivo(NombreFisico) then { Si el archivo no existe... }
    begin
      Write('No se pudo abrir el archivo ',NombreFisico,'.');
      Writeln('El número de error    es ', UltimoError);
      if UltimoError = 2 then                { Verifico que el error  { sea el 2 }
                                             { (File not found, archivo no encontrado) }
         CrearArchivo(Archivo, NombreFisico) { Entonces lo creo vacío }
      else
         Halt(1);                            { Si el error es distinto del 2 entonces detengo }
                                             { el programa }
    end
  else
    AbrirArchivo(Archivo, NombreFisico);     { si existe lo abro como lectura/escritura    }
    {Si llegamos aquí tenemos el archivo listo para usar    }
  Close(Archivo);                            { Siempre cerrar el archivo si está abierto    }
  readkey; { Espera hasta que se presione una tecla }
end.

Aquí ya comienzo usando la unidad creada por nosotros (defin) donde iremos almacenando las definciones comunes y los procedimientos y funciones que serán estandar en nuestro programa.

El ejemplo muestra cómo hacer una apertura segura de un archivo. El procedimiento AbrirArchivo abre nuestro archivo sin más, el procedimiento CrearArchivo lo crea.

En el cuerpo principal del programa primero preguntamos si NO existe el archivo, usando para ello la función vista en el ejemplo anterior, mostramos un mensaje en tal efecto, luego verificamos que el número de error sea el 2, esto es, el archivo no existe en el lugar especificado por NombreFisico, si ese es el caso lo creamos usando el procedimiento escrito para tal efecto. Finalmente si el archivo ya existe lo abrimos para poder trabajar con él.

¿Qué pasa si el error devuelto en UltimoError es distinto de 2 y de cero?. En el ejemplo detenemos el programa, como ya mostramos un mensaje de error esto debería ser suficiente para que el usuario haga algo al respecto. Más elegante aún sería escribir un procedimiento que trate de solucionar el problema si se puede, o bien mostrar un mensaje más informativo del error detectado, por ejemplo si se trata de una unidad de solo lectura, o que el disquette en el que estamos trabajando ha sido retirado, tal implementación se los dejo a su creatividad para no complicar demasiado el ejemplo.


Regresar


inicio
Si llegaste a esta pagina desde un buscador
haz click aqui para ir a la pagina principal
Hosted by www.Geocities.ws

1