Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-11-2006
lpedrazzi lpedrazzi is offline
Miembro
 
Registrado: sep 2005
Posts: 33
Poder: 0
lpedrazzi Va por buen camino
Saber si concluyó correctamente la descarga

Amigos, Buenas tardes alguien me sabe explicar si existe la posibilidad de enterarse si una descarga de archivo finaliza correctamente? estoy utilizando el componente Idhttp1 de las indy 9 de la siguiente manera

//Dónde contenido es un TMemoryStream

idHttp1.Get(Url, Contenido);
Contenido.SaveToFile('C:\archivo.zip');

desde ya muchas gracias.
Responder Con Cita
  #2  
Antiguo 28-11-2006
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 23
Crandel Va por buen camino
La verdad es que nunca lo hice, pero se me ocurre que podrias comparar el tamaño del archivo a bajar con el que bajaste.
__________________
[Crandel]
Responder Con Cita
  #3  
Antiguo 28-11-2006
lpedrazzi lpedrazzi is offline
Miembro
 
Registrado: sep 2005
Posts: 33
Poder: 0
lpedrazzi Va por buen camino
Agradezco tu interés, te comento que en dicha instancia no tengo manera de conocer el tamaño del archivo a descargar. El programa que descarga el archivo es un autómata y descarga archivos de actualizaciones de una página web en determinados horarios sin intervención alguna del usuario.
Responder Con Cita
  #4  
Antiguo 28-11-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Se me ocurre que utilizes el evento "OnWorkEnd" del componente "TIdHttp". Dicho evento se disparará cuando se complete la descarga. En el mismo puedes comprobar el tamaño del archivo con el tamaño de la descarga. Lo primero puedes conseguirlo con el truco "Tamaño real de un archivo" que encuentras aquí mismo en el ClubDelphi. Lo segundo puedes conseguirlo echando un vistazo a la propiedad "IdHTTP.Response.ContentLength".

La cosa podría quedar más o menos así en el evento susomentado:

Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
  Forms, Dialogs, StdCtrls, ComCtrls, IdBaseComponent, IdComponent,
  IdTCPConnection, IdTCPClient, IdHTTP;

type
  TForm1 = class(TForm)
    Button1: TButton;
    IdHTTP: TIdHTTP;
    bProgresoDescarga: TProgressBar;
    procedure Button1Click(Sender: TObject);
    procedure IdHTTPWorkEnd(Sender: TObject; AWorkMode: TWorkMode);
    procedure IdHTTPWork(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer);
    procedure IdHTTPWorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function GetSizeOfFile(const Filename:string): Int64;
var Sr:TSearchRec;
begin
  try
    if FindFirst(FileName,faAnyFile,sr) <> 0 then
      raise Exception.Create('Archivo ' + FileName+' no encontrado');
    Result:= sr.FindData.nFileSizeHigh * maxdword + sr.Finddata.nFileSizeLow;
  finally
    FindClose(sr);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  fs: TFileStream;
begin
  fs := TFileStream.Create('C:\archivo.zip', fmCreate);
  try
    IdHTTP.Get('http://www.loturak.es/zip/loturak_0.9.zip', fs);
  finally
    fs.Free;
  end;
end;

procedure TForm1.IdHTTPWorkBegin(Sender: TObject;
 AWorkMode: TWorkMode; const AWorkCountMax: Integer);
begin
  bProgresoDescarga.Max := IdHTTP.Response.ContentLength;
end;

procedure TForm1.IdHTTPWork(Sender: TObject;
 AWorkMode: TWorkMode; const AWorkCount: Integer);
begin
  bProgresoDescarga.Position := AWorkCount;
end;

procedure TForm1.IdHTTPWorkEnd(Sender: TObject;
 AWorkMode: TWorkMode);
var
  tamanoArchivo: Int64;
  tamanoDescarga: Int64;
begin
  tamanoArchivo := GetSizeOfFile('C:\archivo.zip');
  tamanoDescarga := IdHTTP.Response.ContentLength;
  if (tamanoArchivo = tamanoDescarga) then
    ShowMessage('Descarga terminada con éxito')
  else
    ShowMessage('Hubo algún problema con la descarga');
end;

end.

El único problema que se me ocurre es que el Servidor no retorne el "ContentLength" del archivo. No es lo habitual, pero, puede suceder. Tendrías que hacer pruebas en tu caso. Es lo que se me ocurre a bote pronto.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 28-11-2006
lpedrazzi lpedrazzi is offline
Miembro
 
Registrado: sep 2005
Posts: 33
Poder: 0
lpedrazzi Va por buen camino
El IdHTTP.Response.ContentLength me devuelve el valor -1 sera porque el servidor no me retorna el tamaño?
Responder Con Cita
  #6  
Antiguo 28-11-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

¿Te devuelve "-1" una vez comenzada/concluída la descarga? Entonces está claro: el Servidor no retorna el tamaño del archivo a descargar.
__________________
David Esperalta
www.decsoftutils.com
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
Maximizar correctamente piccolo2101 Varios 4 22-03-2014 13:35:59
MDI no se maximiza correctamente Lepe OOP 4 26-08-2010 18:42:37
RecordCount no funciona correctamente Hagen Firebird e Interbase 2 25-07-2006 23:23:41
Saber que se imprimio correctamente Alexander Impresión 2 13-06-2006 18:11:01


La franja horaria es GMT +2. Ahora son las 03:39:03.


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