Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   como puedo comprobar si un fichero online existe (https://www.clubdelphi.com/foros/showthread.php?t=66176)

cocute 05-02-2010 11:48:58

como puedo comprobar si un fichero online existe
 
uso este procedimiento para descargar el fichero de una web:

Código Delphi [-]
procedure TForm1.descargarURL ( const direccionURL, ficheroLocal : string);
begin
  if direccionURL <> '' then
  begin
    with TDownloadURL.Create(self) do
    try
      URL := direccionURL;
      FileName := ficheroLocal;
      ExecuteTarget(nil);
    finally
      Free;
    end;
  end;
end;

para usarlo hago esto y todo ok
Código Delphi [-]
descargarurl('http://www.web.com/fichero.txt', 'fichero.txt');

Como es normal, si el servidor esta offline me salta un mensaje "Error downloading URL: http://www.web.com/fichero.txt", en vez de eso preferiria que no me saliese ningún mensaje emergente o si sale al menos poder cambiar el mensaje que sale por otro. ¿como hago eso?

cocute 05-02-2010 12:18:15

he probado con esto:
Código Delphi [-]
procedure TForm1.descargarURL ( const direccionURL, ficheroLocal : string);
begin
  if direccionURL <> '' then
  begin
    with TDownloadURL.Create(self) do
    try
      URL := direccionURL;
      FileName := ficheroLocal;
      OnDownloadProgress := URL_OnDownloadProgress;
     ExecuteTarget(nil);
     except
     ShowMessage('El servidor esta offline');
      Free;
    end;
  end;
end;

pero cuando el servidor está offline me salen dos mensajes emergentes:
1º el que he puesto yo: "El servidor esta offline"
cuando cierro el 1º me sale este:
2º el "The specified file was not found"

como quito el 2º?
se que la excepción es ERROR_FILE_NOT_FOUND pero no estoy familiarizado con el uso de excepciones, poco a poco lo voy pillando viendo ejemplos

cocute 05-02-2010 12:46:34

he probado esto que creia que era lo correcto pero no funciona, no me detecta la excepcion me salta el mensaje que me salia a la primera de "Error downloading URL: http://www.web.com/fichero.txt" en vez del que pongo

Código Delphi [-]
procedure TForm1.descargarURL ( const direccionURL, ficheroLocal : string);
begin
  if direccionURL <> '' then
  begin
    with TDownloadURL.Create(self) do
    try
      URL := direccionURL;
      FileName := ficheroLocal;
      OnDownloadProgress := URL_OnDownloadProgress;
      ExecuteTarget(nil);
    except
    on e : EFileNotFoundException do
     begin
      ShowMessage('El servidor esta offline');
      Free;
     end;
    end;
  end;
end;

roman 05-02-2010 18:50:21

Hay dos puntos a notar.

Primero, except y finally son independientes uno de otro por lo que no puedes omitir uno de los dos si son necesarios ambos. Lo que tienes que hacer es anidar los bloques:

Código Delphi [-]
with TDownloadUrl.Create(nil) do
  try
    URL := 'http://ianua.cele.unam.mx/roman/dummy.txt';
    Filename := 'C:\Users\roman\Documents\dummy.txt';

    try
      ExecuteTarget(nil);
    except
      ShowMessage('No se puede descargar el archivo');
    end;
  finally
    Free;
  end;

Tal como lo tenías, el componente se destruirá sólo cuando haya una excepción.

Por otra parte, cuando ejecutas una aplicación desde el IDE y tienes activada la opción Stop on Delphi Exceptions:



la ejecución se detiene dos veces, en la excepción original y en la que pones tú. Puedes desactivar dicha opción pero, en todo caso, cuando ejecutes desde fuera del IDE, sólo se detendrá en tu excepción.

// Saludos

cocute 05-02-2010 22:01:37

Muchas gracias por responder pero haciendo lo que me dices
me siguen saliendo los dos mensajes no solo el mio.
1º "No se puede descargar el archivo"
y cuando lo cierro
2º "The specified file was not found"

uso delphi 2010
la opcion equivalente a "Stop on delphi exceptions" que encuentro en Delphi2010 es esta
"Notify on Language exceptions"
pero la desmarco y cambio el codigo por el que me has puesto pero nada, me salen los dos mensajes

cocute 06-02-2010 12:41:19

Solucionado, funcionaba bien la forma que me habias puesto .

el problema era mio, ya que el 2º mensaje me venia de otro lado no de este procedimiento.

muchas gracias


La franja horaria es GMT +2. Ahora son las 23:58:38.

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