Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Atrapar una excepción de error en la apertura de un archivo

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Atrapar una excepción de error en la apertura de un archivo Responder citando

Hola a todos en el foro, Quisiera saber si alguno sabe como cachar una excepción si ocurre un error al intentar cargar una imagen, como que no se encontro el archivo, algo asi. Se que para eso se utilizan las instrucciones try{}catch(){} pero no se como filtrar el tipo de error (que parametros lleva el catch), si alguien sabe como filtrar este error, se los agradecere de antemano

el código para cargar la imagen es el siguiente
i ="C:\\Images\\"+nomimagen;
frmmenu->Foto->Picture->LoadFromFile(i);
Volver arriba
Mensaje    Asunto: Responder citando

Ya que se trata de abrir imágenes podrías utilizar la clase de excepción EInvalidGraphic. En el ejemplo siguiente se utiliza un Tbutton, un OpenPictureDialog y un TImage:
Código:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    if (abrir->Execute()){
      try {
        Image1->Picture->LoadFromFile(abrir->FileName);
      }
      catch (EInvalidGraphic &E){
        ShowMessage("La extensión del archivo no es correcta.");
      }
    }
}

Donde "abrir" es el nombre del TOpenPictureDialog.
La excepción EInvalidGraphic salta cuando la extensión del archivo gráfico no se reconoce.
_________________
¡ADELANTE CON ESTE SUPER FORO!
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Atrapar una excepción de error en la apertura de un archivo Responder citando

Gracias por el consejo, me sirvio mucho tu ejemplo, pero opte por un tipo de excepción más general, como la EFOpenError que se ajusta más a lo que buscaba. Lo que queria era no interrumpir el flujo del programa ante una excepción como esta, por si se borraba por accidente la dirección de el archivo de imagen por ejemplo.

Código:
 if(OPD1->FileName!="")
 {
  try
  {
   Foto1->Picture->LoadFromFile(OPD1->FileName);
  }
  catch(EFOpenError &E) {
  ShowMessage("No fue posible abrir la imagen en la dirección "+OPD1->FileName);}


Ahora lo que necesito es una forma de que solo se muestre mi mensaje de error y no el del sistema, ya que actualmente me manda una excepción del sistema y luego muestra mi mensaje
Volver arriba
Mensaje    Asunto: Responder citando

Lo mismo pero mas barato, jeje, es decir, con los 3 puntos hacemos que cualquier exepcion que se produzca nos muestre el mensaje.

Código:
if(OPD1->FileName!="")
 {
  try
  {
   Foto1->Picture->LoadFromFile(OPD1->FileName);
  }
  catch(...) {
  ShowMessage("No fue posible abrir la imagen en la dirección "+OPD1->FileName);}

_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

El hecho de que te muestre primero el mensaje de error del sistema y luego el tuyo que has puesto en el catch es porque estás compilando desde el entorno de desarrollo, eso es normal, no se porqué, pero es así; Esto no quiere decir que el código necesite cambiarse ya que cuando el programa se ejecute fuera del entorno de desarrollo el mensaje del sistema desaparece y sólamente se muestra tu propio mensaje que has puesto dentro de la estructura catch. Puedes hacer la prueba buscando el archivo ejecutable de tu programa desde el explorador de windows y ejecutarlo con doble click entonces sólo deberá aparecer tu mensaje personalizado.
_________________
¡ADELANTE CON ESTE SUPER FORO!
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Gracias por los consejos, los pondre en practica lo antes posible
Volver arriba
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.