Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Tamaño de archivo en internet (https://www.clubdelphi.com/foros/showthread.php?t=27737)

locojoan 29-11-2005 16:19:53

Tamaño de archivo en internet
 
Hola. A ver si alguien me puede ayudar.
Quisiera saber como obtener el tamaño en bytes de un archivo que esta en internet. muchas gracias.

Casimiro Notevi 29-11-2005 20:58:48

Que está en internet, ¿qué quiére decir exactamente?, puédes descargarlo por http?, accedes mediante ftp?, está accesible para cualquiera?, está "oculto"?, está en algún lugar del mundo o en tu red local o en tu propio ordenador, pero quieres acceder por internet?, quiéres hacerlo con un programa en delphi?, accediendo mediante un cliente de ftp?, por telnet?... etc.;)

dec 30-11-2005 05:38:35

Hola,

La siguiente función está hecha un tanto a bote pronto siguiendo los artículos (no todos, ni tampoco completamente) que sobre el API WinInet hay publicados en "La Web de JM". No recomiendo utilizar dicha función (aunque funciona, aparentemente) sino es antes leyendo y comprendiendo los artículos mencionados. Es claro que la función es muy mejorable, ya lo he dicho, pero, dejo al interesado que la mejore en cuanto pueda hacerse.

Código Delphi [-]
uses
  WinInet;

// Devuelve el tamaño (en Bytes) de un determinado
// archivo de Internet especificado por el parámetro URL.
//
function TamanoArchivoInternet(URL: string) : Longint;
var
  auxiliar: DWORD;
  longitud: DWORD;
  HUrl: HINTERNET;
  HOpen: HINTERNET;
  totalBytes: DWORD;
begin
  totalBytes := 0;
  HOpen := InternetOpen('Delphi Agent', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  if (HOpen <> nil) then
  begin
    HUrl := InternetOpenUrl(HOpen, PChar(URL), nil, 0, INTERNET_FLAG_RELOAD, 0);
    if (HUrl <> nil) then
    begin
      auxiliar := 0;
      longitud := SizeOf(DWORD);
      if (not HttpQueryInfo(HUrl, HTTP_QUERY_CONTENT_LENGTH or
        HTTP_QUERY_FLAG_NUMBER, @totalBytes, longitud, auxiliar)) then
        RaiseLastOSError;
    end
    else
      RaiseLastOSError;
  end
  else
    RaiseLastOSError;
  if (HUrl <> nil) then
    InternetCloseHandle(HUrl);
  if (HOpen <> nil) then
    InternetCloseHandle(HOpen);
  Result := totalBytes;
end;
* Agradezco a JM sus interesantísimos y completísimos artículos y tutoriales que tiene publicados en su página Web.

locojoan 30-11-2005 15:19:44

No funciona bien siempre
 
esto es exactamente lo que quiero, pero lamentablemente no funciona bien esta funcion. hay veses que funciona bien y otras no. A ver si alguien me ayuda a mejorar y pulir la funcion.

[Gunman] 30-11-2005 15:37:47

Pero qué protocolo usa tu programa? FTP, HTTP, ... ?

dec 30-11-2005 15:41:33

Hola,


Cita:

Empezado por locojoan
(...) lamentablemente no funciona bien esta funcion. hay veses que funciona bien y otras no.

Ya, pero, como espero que comprendas, no podemos adivinar qué error o errores te aparecen. ¿No podrías ser un poco más explícito? ¿Qué error te encuentras? ¿Cómo es eso de que a veces funciona y a veces no? ¿No te has parado a leer los artículos que he referido? La verdad, pides ayuda, pero, me da la sensación (disculpa si soy demasiado franco) de que quieres que se te haga la función y aquí paz y después gloria.


La franja horaria es GMT +2. Ahora son las 12:24:58.

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