Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Zu Downloadene Dateigröße herausbekommen (https://www.delphipraxis.net/86572-zu-downloadene-dateigroesse-herausbekommen.html)

xZise 15. Feb 2007 20:31


Zu Downloadene Dateigröße herausbekommen
 
Wie kann ich die Dateigröße einer zu downloadenen Datei herausbekommen?

arbu man 15. Feb 2007 20:55

Re: Zu Downloadene Dateigröße herausbekommen
 
Wie downloadest du die Datei denn ?

Per HTTP, dann gibt es im Header Content-Length.

Pfoto 15. Feb 2007 20:56

Re: Zu Downloadene Dateigröße herausbekommen
 
Hi!

ich benutze z.Zt. folgende Funktionen:


Beim HTTP-Download:
Delphi-Quellcode:
uses WinINet;

var
  URL: HInternet;

  function GetHTTPFileSize(hInet:HINTERNET):cardinal;
  var
    dwindex,dwcodelen :dword;
    dwcode:array[1..20] of char;
  Begin
    dwIndex := 0;
    dwCodeLen := 10;
    HttpQueryInfo(hInet, HTTP_QUERY_CONTENT_LENGTH, @dwcode, dwcodeLen, dwIndex);
    Result := cardinal(strtoint(PCHAR(@dwcode)));
  end;

URL := InternetOpenURL(hSession, PChar(URL), nil, 0, 0, 0);
SizeOfFile:= GetHTTPFileSize(URL);

Beim Download per FTP:
Delphi-Quellcode:
   
var
  sRec: TWin32FindData;

    if FtpFindFirstFile(fFTP, PChar(ftpFile), sRec, 0, 0) <> nil then
    begin
      fileSize := sRec.nFileSizeLow;astWriteTime;
    end else
    begin
      ShowMessage(Format('Datei nicht vorhanden',[ftpFile]));
    end;
Gruß
Pfoto

xZise 15. Feb 2007 21:10

Re: Zu Downloadene Dateigröße herausbekommen
 
ICh benutzte TIdHTTP ;)

Delphi-Quellcode:
URL := InternetOpenURL(hSession, PChar(URL), nil, 0, 0, 0);
Das "Url" in der PChar-Methode ist ein String oder :P

[edit]
Also ich habe jetzt folgenden Code:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  URL: HInternet;
  err : string;
 
  function GetHTTPFileSize(hInet:HINTERNET):cardinal;
  var
    dwindex,dwcodelen :dword;
    dwcode:array[1..20] of char;
  Begin
    dwIndex := 0;
    dwCodeLen := 10;
    HttpQueryInfo(hInet, HTTP_QUERY_CONTENT_LENGTH, @dwcode, dwcodeLen, dwIndex);
    Result := cardinal(strtoint(PCHAR(@dwcode)));
  end;
begin
     lSize.Caption := 'Size: Loading...';
     lSize.Repaint;
     try
        lSize.Caption := 'Size: ' + IntToStr(GetHTTPFileSize(InternetOpenURL(InternetOpen('InetURL:/1.0',INTERNET_OPEN_TYPE_PRECONFIG,nil,nil,0), PChar(Edit1.Text), nil, 0, 0, 0))) + ' B';
     except
        err := SysErrorMessage(GetLastError);
        if err <> '' then
           err := ' (' + err + ')';
        lSize.Caption := 'Size: Error' + err;
     end;
end;
Und dieser gibt bei manchen Seiten (z.B. DP-Index) einen Fehler:
Zitat:

---------------------------
Project1
---------------------------
'ÿÿÿÿäõ' ist kein gültiger Integerwert.
---------------------------
OK
---------------------------
Wie kann ich das beheben?
Bei anderen Seiten (z.B. Logo) funktioniert es wunderbar....
[/edit]

xZise 19. Feb 2007 15:32

Re: Zu Downloadene Dateigröße herausbekommen
 
Gibt es keine Erklärung für dieses Phänomen?

shmia 19. Feb 2007 15:45

Re: Zu Downloadene Dateigröße herausbekommen
 
Returncode von HttpQueryInfo muss abgefragt werden.

Christian Seehase 19. Feb 2007 15:48

Re: Zu Downloadene Dateigröße herausbekommen
 
Moin Fabian,

ich schlage vor, dass Du erst einmal den Code aufräumst.
So etwas:
Delphi-Quellcode:
GetHTTPFileSize(InternetOpenURL(InternetOpen(...
geht ja schon mal gar nicht ;-)

Die Handles müssen schliesslich wieder geschlossen werden.
Ausserdem kannst Du dann auch prüfen, ob Du die Funktionen überhaupt erfolgreich aufgerufen werden konnten.

xZise 19. Feb 2007 15:50

Re: Zu Downloadene Dateigröße herausbekommen
 
Zitat:

Zitat von shmia
Returncode von HttpQueryInfo muss abgefragt werden.

???

Also ich habe auch noch das gefunden:
Größe einer Onlinedatei ermitteln

Aber er kennt nicht "GetInternetFileSize" ... Oder gehört das zu IdHttp?

Christian Seehase 19. Feb 2007 16:43

Re: Zu Downloadene Dateigröße herausbekommen
 
Moin Fabian,

HTTPQueryInfo gibt true zurück wenn der Aufruf erfolgreich war.
War er es nicht kannst Du Dir mit GetLastError zurückgeben lassen, warum nicht.

xZise 19. Feb 2007 17:17

Re: Zu Downloadene Dateigröße herausbekommen
 
Zitat:

Zitat von Christian Seehase
Moin Fabian,

ich schlage vor, dass Du erst einmal den Code aufräumst.
So etwas:
Delphi-Quellcode:
GetHTTPFileSize(InternetOpenURL(InternetOpen(...
geht ja schon mal gar nicht ;-)

Die Handles müssen schliesslich wieder geschlossen werden.
Ausserdem kannst Du dann auch prüfen, ob Du die Funktionen überhaupt erfolgreich aufgerufen werden konnten.

Sry... Irgendwie fehlte die Rote Box....

Also okay ^^ Ich werds wieder aufsplitten, aber daran wirds nicht liegen...

Zitat:

Zitat von Christian Seehase
HTTPQueryInfo gibt true zurück wenn der Aufruf erfolgreich war.
War er es nicht kannst Du Dir mit GetLastError zurückgeben lassen, warum nicht.

Aber warum geht es manchmal nicht, und dann machmal wieder ?


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:13 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz