IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

Determiner la taille d'un gros fichier AVANT de le telecharger


Sujet :

Windows

  1. #1
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 126
    Points : 54
    Points
    54
    Par défaut Determiner la taille d'un gros fichier AVANT de le telecharger
    Bonjour,

    J'ai un programme qui utiliser les fonctions Wininet avec en particulier InternetReadFile qui telecharge en memoire vive de gros fichier (plusieurs megas) a partir d'une adresse HTTP. Le probleme est que je ne connais pas a l'avance la taille exacte du programme a telecharger. Bien sur je peux reserver de l'espace tres grand, pour etre sur d'avoir assez de memoire. Mais c'est bete de reserver des dizaine de megas si au final le programme ne fait qu'un mega. De meme si je ne reserve pas assez, il va y avoir des problemes...

    Alors bien sur je connais la fonction InternetQueryDataAvailable, mais le probleme est que pour les gros fichier cette fonction ne renvoit pas la taille totale du fichier, mais plutot le nombre d'octets disponible pour le prochain appel a InternetReadFile. Il faut alors boucler et rappeler a nouveau InternetQueryDataAvailable plusieurs fois de suites. Donc contrairement a ce que je peux lire dans pas mal de posts, cette fonction ne permet pas de connaitre de maniere generale la taille d'un fichier avant de l'avoir telecharge.

    Y a-t-il une autre facon de faire? J'ai vu que FTPgetFileSize peut le faire, mais le probleme c'est que je ne veut pas faire de FTP, car le programme est destine au public, donc hors de question de communiquer les identifants et mots de passe FTP.

  2. #2
    Membre habitué
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 109
    Points : 168
    Points
    168
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    #include <wininet.h>
    #include <stdio.h>
    
    int main(void)
    {
      HINTERNET hNet, hUrl;
      DWORD dwResult, dwSize = sizeof(DWORD);
    
      if((hNet = InternetOpen(0, INTERNET_OPEN_TYPE_DIRECT, 0, 0, 0)))
      {
        if((hUrl = InternetOpenUrl(hNet, "http://test-debit.free.fr/image.iso", 0, 0, 0, 0)))
        {
          printf("%ld\n", HttpQueryInfo(hUrl, HTTP_QUERY_CONTENT_LENGTH|HTTP_QUERY_FLAG_NUMBER, &dwResult, &dwSize, 0) ? dwResult : 0);
          InternetCloseHandle(hUrl);
        }
        InternetCloseHandle(hNet);
      }
      return 0;
    }

  3. #3
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 126
    Points : 54
    Points
    54
    Par défaut
    Merci!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 11
    Dernier message: 07/09/2007, 10h56
  2. Réponses: 4
    Dernier message: 16/07/2007, 17h33
  3. Controler la taille d'un fichier avant l'envoi
    Par kahya dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 06/04/2007, 12h45
  4. Tester la taille de fichier avant upload
    Par RobinNono dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 27/06/2006, 17h38
  5. Determiner la taille d'un ensemble de fichiers
    Par devdev2003 dans le forum Linux
    Réponses: 12
    Dernier message: 24/08/2005, 11h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo