Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Capturando excepciones en un archivo de texto (https://www.clubdelphi.com/foros/showthread.php?t=63577)

noob 19-02-2009 22:50:59

Capturando excepciones en un archivo de texto
 
Hola, tengo este código pero no me funciona correctamente porque mi aplicación se cierra en vez de saltar la excepción.

Código Delphi [-]
  try
    System.Assign(archivo, 'archivo.txt');
    System.Reset(archivo);
    try
      while not EOF(archivo) do
        System.Readln(archivo, Texto);
    finally
      System.Close(archivo);
    end;
  except
    On E: eFicheroNoExiste do
      ShowMessage(E.Message);
  end;

¿Hay algo mal?

Saludos.

cHackAll 19-02-2009 23:20:45

Código Delphi [-]
 AssignFile(archivo, 'archivo.txt');
 {$i-}Reset(archivo);{$i+}
 if IoResult = 0 then
  begin
   while not EOF(archivo) do
    Readln(archivo, Texto);
   CloseFile(archivo);
  end;

noob 19-02-2009 23:51:23

Ya, pero quiero hacerlo mediante excepciones.

Saludos.

roman 20-02-2009 00:37:40

¿Qué es eso de eFicheroNoExiste? La excepción que va a saltar si no existe el archivo es EInOutError.

// Saludos

noob 20-02-2009 07:49:19

Esto es mi unidad uFicheroNoExiste.

Código Delphi [-]
unit uFicheroNoExiste;
 
interface
 
uses
  SysUtils;
 
type
  eFicheroNoExiste = class (Exception)
                         public
                           constructor Create;
                         end;
implementation
 
constructor eFicheroNoExiste.Create;
begin
  inherited Create('El fichero no existe');
end;
 
end.

Neftali [Germán.Estévez] 20-02-2009 09:47:46

Cita:

Empezado por noob (Mensaje 338794)
¿Hay algo mal?

Yo al iguial que Román creo que el error anda en torno a la captura de excepción (su tipo).
Tú has creado un tipo nuevo, pero eso no significa que Delphi vaya a generar los errores de entrada salida con tu tipo.

Captura el error de IO y en ese punto si te interesa levantas la tuya.
También capturaría otros tipos de errores, al menos en este caso te servirá para saber qué está pasando.

Algo así:

Código Delphi [-]
try
...
except
  on: E: EInOutError do begin
    // O muestras el mensaje
    ShowMessage(Format('Se ha producido un eror de entrada/salida. Mensaje de sistema: %s',[E.Message]));
    // 0 levantas la tuya
    raise eFicheroNoExiste.Create();
  end
  else begin
    ShowMessage(Format('Error desconocido. Clase(%s), Mensaje: %s',[E.ClassName, E.Message]));
  end;
end;

Un saludo


La franja horaria es GMT +2. Ahora son las 08:19:37.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi