Page 1 sur 1

URLDownloadToFile_

Publié : lun. 23/juil./2007 15:49
par Droopy
Comment connaitre la taille d'un fichier avant de lancer la commande URLDownloadToFile_ ( de l'API Win32) ?

Merci d'avance

Publié : lun. 23/juil./2007 17:47
par nico

Publié : lun. 23/juil./2007 17:47
par Anonyme
je ne vois pas comment t'aider, mais un truc à la barbare peut marcher
j'ai lu sur msdn que cette fonction peut renvoyer cette constante :

Code : Tout sélectionner

E_OUTOFMEMORY
ce qui signifie qu'il na pas assez de mémoire pour stocké le fichier proprement dit. Tu fixe la mémoire à 1 bytes , et tant que URLDownloadToFile_() = E_OUTOFMEMORY , alors tu incrémentes ta zone mémoire de 1 bytes , etc...
a moins qu'il existe une commande pour cela...

Publié : lun. 23/juil./2007 18:19
par brossden
Droopy je ne suis pas trés performant en C mais j'ai trouvé cela :


public static String getFileSize (String url) throws Exception
{
URL aURL = new URL (url);
URLConnection yc = aURL.openConnection ();
// recupere la taille du fichier .....
int FileLenght = yc.getContentLength();

if (FileLenght == -1 ) {
throw new IOException("Fichier non valide.");
}
return FileLenght;
}

J'espère que tu pourras en tirere quelque chose !

Publié : lun. 23/juil./2007 18:45
par Ollivier
Brossden? Mais t'es en vie? :D Ton PC, tu l'as désinfecté?

Publié : lun. 23/juil./2007 20:05
par Droopy
Merci les gars, j'ai eu une réponse de NetMaestro sur le forum anglais, qui m'a aiguillé sur le même type de code que nico .
J'ai modifié le code en question pour répondre à mon besoin:

Code : Tout sélectionner

;/ Basé sur le code de Joakim L. Christiansen

Procedure HttpFileSize(Url.s)
  hInet = InternetOpen_("Downloader",0,0,0,0) 
  hURL  = InternetOpenUrl_(hInet,Url,0,0,$80000000,0)
  
  BufferLength = 2048
  Buffer.s = Space(BufferLength)
  BufferLengthWas = BufferLength
  
  Domain.s  = StringField(Url,3,"/")
  hInetCon = InternetConnect_(hInet,Domain,80,#Null,#Null,3,0,0) 
  If hInetCon 
    hHttpOpenRequest = HttpOpenRequest_(hInetCon,"HEAD",ReplaceString(Url,"http://"+Domain+"/",""),#Null,#Null,0,$80000000,0) 
    If hHttpOpenRequest 
      iretval = HttpSendRequest_(hHttpOpenRequest,#Null,0,0,0) 
      If iretval 
        HttpQueryInfo_(hHttpOpenRequest,19,@Buffer,@BufferLength,0)
        String.s = PeekS(@Buffer,BufferLength): BufferLength = BufferLengthWas 
        If Trim(String.s) = "200" 
          HttpQueryInfo_(hHttpOpenRequest,22,@Buffer,@BufferLength,0) 
          String.s = PeekS(@Buffer,BufferLength): BufferLength = BufferLengthWas 
          Debug String.s
          If FindString(String.s,"Content-Length:",1) 
            i = FindString(String.s,"Content-Length:",1) + Len("Content-Length:") 
            String.s = Mid(String.s,i,Len(String.s)-i) 
            FileSize = Val(Trim(String.s)) 
          EndIf 
        EndIf 
      EndIf 
    EndIf 
  EndIf 
  
  InternetCloseHandle_(hURL) 
  InternetCloseHandle_(hInetCon) 
  InternetCloseHandle_(hInet) 
  ProcedureReturn FileSize
EndProcedure

MessageRequester("",Str(HttpFileSize("http://acervo.gratis.com.br/arquivos/distrib/544/SafariSetup.exe")))

Publié : lun. 23/juil./2007 20:35
par Anonyme
Effectivement , c'est plus propre et plus serieux que ma méthode néandertalienne :D

Publié : mar. 24/juil./2007 9:15
par brossden
Je ne suis pas encore mort Ollivier, c'est mon PC de bureau qui est vérolé pas le portable depuis lequel j'ai plaisir à voir que tu m'espérais ....Couic ! :o

Publié : mar. 24/juil./2007 17:08
par Jacobus
Salut, je pose mes questions ici pour éviter d'ouvrir un nouveau sujet sur le même thème.

Savez vous s'il est possible de lancer un téléchargement avec URLDownloadToFile_() sur un fichier protégé en htaccess?
si oui comment?
Ou alors faut-il obligatoirement ouvrir une connexion ftp au serveur où se trouve le fichier ? (méthode que j'utilise actuellement)

merci.