Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-08-2008
Paulao Paulao is offline
Miembro
 
Registrado: sep 2003
Ubicación: Rua D 31 Casa 1 - Inhoaíba - Rio de Janeiro - RJ - Brasil
Posts: 637
Poder: 21
Paulao Va por buen camino
Duda no Try..Except

Señores, tengo un bloco Try..Except, donde yo tengo un codigo para crear un directorio(CreateDir(Path)), pero antes doy un DirectoryExists. Que pasa es, que si fuera posible crear mi Directorio, gustaria que fuera para el bloco Except para yo tratar mi excepccion, pero no esta asi. Si no crea, se va al final, olvidando el Except.

Código Delphi [-]
try
    with Mfd do
    begin
      dirpadrao      := ReadString('MFD','DiretorioPadrao','');
      pathorigem     := ReadString('MFD','PathOrigem','');
      pathdestino    := ReadString('MFD','PathDestino','');
      arquivoorigem  := ReadString('MFD','NomeArquivoOrigem','');
      arquivodestino := ReadString('MFD','NomeArquivoDestino','');
    end;
    if not DirectoryExists(dirpadrao) then
      if not CreateDir(dirpadrao) then
        msg := 'Não foi possível criar o diretório padrão';

    SWEDA_CapturarDispositivo(1,0,'',0,15000);
    SWEDA_ReproduzirFitaDetalhe(PathOrig,PathDest,dtIni,dtFim,0);

    CapeadorReducaoZ;
    CapeadorItens;
    GravaReducao_Z;
    GravaItens;

    if not DeleteFile(dirpadrao) then
      msg := 'Não foi possível deletar arquivos no diretório padrão';

  except
    Warning(msg);
  end;
Responder Con Cita
  #2  
Antiguo 13-08-2008
Avatar de tcp_ip_es
tcp_ip_es tcp_ip_es is offline
No confirmado
 
Registrado: ago 2003
Ubicación: Madrid
Posts: 635
Poder: 0
tcp_ip_es Va por buen camino
Puedes crear cuantos try except quieras, lo que tienes que ver es que excepción te provoca la no existencia de directorio o más bien crearte tu la excepción. ejemplito:

Código Delphi [-]
uses FileCtrl;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if not DirectoryExists('c:\temp') then
    if not CreateDir('C:\temp') then
    raise Exception.Create('Cannot create c:\temp');
end;
sacado de la ayuda de Delphi
Responder Con Cita
  #3  
Antiguo 13-08-2008
Paulao Paulao is offline
Miembro
 
Registrado: sep 2003
Ubicación: Rua D 31 Casa 1 - Inhoaíba - Rio de Janeiro - RJ - Brasil
Posts: 637
Poder: 21
Paulao Va por buen camino
El que yo gustaria es entrar en except siempre que una execpccion fuera encontrada como en mi codigo.
Responder Con Cita
  #4  
Antiguo 13-08-2008
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Entonces necesitas es un Try...finally.

Y No "silencies" la excepcion. Siempre es mejor relanzar las excepciones. Es mucho mejor que los errores salgan tan escandalosamente como sea posible porque eso fuerza a hacer los programas mas robustos y ayudan a no tener errores ocultos, como en tu caso: Que garantiza que el error sea por lo que tu piensas? Puede ser un problema de seguridad, o de memoria. O por el frio...
__________________
El malabarista.
Responder Con Cita
  #5  
Antiguo 13-08-2008
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Thumbs up

Juntando lo que te han dicho, yo usaría este:

Código Delphi [-]
msg := '';
try
  try
    with Mfd do
    begin
      dirpadrao      := ReadString('MFD','DiretorioPadrao','');
      pathorigem     := ReadString('MFD','PathOrigem','');
      pathdestino    := ReadString('MFD','PathDestino','');
      arquivoorigem  := ReadString('MFD','NomeArquivoOrigem','');
      arquivodestino := ReadString('MFD','NomeArquivoDestino','');
    end;
    if not DirectoryExists(dirpadrao) then
      if not CreateDir(dirpadrao) then
        msg := 'Não foi possível criar o diretório padrão';

    SWEDA_CapturarDispositivo(1,0,'',0,15000);
    SWEDA_ReproduzirFitaDetalhe(PathOrig,PathDest,dtIni,dtFim,0);

    CapeadorReducaoZ;
    CapeadorItens;
    GravaReducao_Z;
    GravaItens;

    if not DeleteFile(dirpadrao) then
      msg := 'Não foi possível deletar arquivos no diretório padrão';

   finally
     if (msg <> '') then begin
       Warning(msg);
     end;
   end;
except
  on E:Exception be begin
    raise;
  end; 
 end;

Utilizando lo que hay en el finally sólo sacas el mensaje cuando exista error. Además siempre compruebas si lo ha habido; Por ultimo, queda el Except, por si ocurre cualquier otro error inesperado, que tengas constancia de él.

Tal vez, yo lo organizaría de otra forma, pero mantendría esos elementos.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #6  
Antiguo 13-08-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Paulao Ver Mensaje
El que yo gustaria es entrar en except siempre que una execpccion fuera encontrada como en mi codigo.
Pero el problema aquí es que no hay excepción en tu código, no al menos una provocada por CreateDir. Tal como lo indica tcp_ip_es, CreateDir no genera una excepción en caso de error, simplemente devuelve false. Por ello, y tal como se indica en la ayuda de delphi y ya comenta tcp_ip_es, lo que debes hacer es lanzar tú mismo la excepción.

No entiendo bien por qué te han mencionado lo del finally. No le veo relación al asunto.

// Saludos
Responder Con Cita
  #7  
Antiguo 13-08-2008
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Tienes razon roman. Pense era que deseaba que algo siempre se ejcutara, independientemente de si habia o no excepcion.

De todas maneras, la forma de hacer el codigo esta defectuosa. Al enmascarar el error y presuponer la causa se esta dejando un problema latente que luego se podria convertir en un bug dificil de determinar. Existen muchas razones por las cuales un directorio puede o no alterarse.
__________________
El malabarista.
Responder Con Cita
  #8  
Antiguo 13-08-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por mamcx Ver Mensaje
De todas maneras, la forma de hacer el codigo esta defectuosa.
Tienes razón. Tal como lo puso originalmente, intenta captar una excepción que nunca va a ocurrir (la de la función CreateDir) y con ello oculta cualquier otra que sí pueda ocurrir.

A mi en particular no me gusta generar excepciones donde no las hay. Si CreateDir devuelve false, actúo en consecuencia ahí mismo, si necesidad de generar una excepción para tratarla cinco líneas abajo.

// Saludos
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
duda ECO VCL.NET cmm07 Varios 1 03-03-2008 19:32:56
duda con BDE ercrizeporta Conexión con bases de datos 3 29-05-2007 12:20:46
Duda fenther Varios 4 17-04-2007 20:01:45
Una duda linuz Lazarus, FreePascal, Kylix, etc. 3 29-09-2004 23:41:27
Una duda condor Varios 8 02-06-2004 05:33:56


La franja horaria es GMT +2. Ahora son las 18:57:29.


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