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

C++ Discussion :

Copier une image du web sur le disque dur en C++


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    336
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 336
    Points : 341
    Points
    341
    Par défaut Copier une image du web sur le disque dur en C++
    Bonjour à tous,


    Je souhaite faire un programme qui recopie des images d'un site web sur mon disque dur. Il s'agit en l'occurence de la terre vue du ciel et plus particulièrement ici :
    Site de la NASA où on peut voir des images satellite de la même zone quotidiennement (ici la France du sud-est)

    J'ai tenté la copie avec la fonction CopyFile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	std::string url="http://rapidfire.sci.gsfc.nasa.gov/subsets/AERONET_Carpentras/2006284/AERONET_Carpentras.2006284.terra.2km.jpg";
    	std::string loc="C:/monimage.jpg";
     
        if(CopyFile(url.c_str(),loc.c_str(),true)==0) {
           DWORD erreur= GetLastError();   	
       	   char err[50];
           sprintf( err, "%d", erreur );
           ::MessageBox(NULL,err,err,0);       
        }
    mais elle échoue avec le code 123, ce qui correspond à "périphérique inconnu".
    Est-ce que cette fonction n'est donc pas faite pour copier des fichiers depuis le Web ?
    Existe-t-il une fonction qui permettrait de faire ça ?

    Merci pour toute piste !

    Karl.

  2. #2
    Membre confirmé Avatar de themadmax
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 446
    Points : 496
    Points
    496
    Par défaut
    Ah ben non, c'est fonction n'est pas fait pout cela. D'ailleur le C++ est loin d'etre un language orienté web. Mais si tu veut quand meme faire cela en C++ :
    Tu peut toi meme avec l'aide de socket envoyer une requete HTTP au serveur puis enregistrer cela dans un fichier
    Utiliser un programme externe genre wget, en le lancant depuis ton programme.
    Utiliser une lib. qui te permet de faire cela dans ton prog.
    ________________________________________________
    http://bliquid.fr : Blog sur Android et l'Acer Liquid

  3. #3
    Fry
    Fry est déconnecté
    Membre régulier Avatar de Fry
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 150
    Points : 119
    Points
    119
    Par défaut
    le C++ peut tres bien faire ca...

    si tu utilise l api windows tu a la fonction getFileFromURL pour telecharger ton image, sur linux tu dois avoir une fonction similaire...

    et il y a eu recement un post sur ce forum parlant de la libcurl http://curl.haxx.se/ permettant de transferer des fichier via des protocole standard dont http

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    336
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 336
    Points : 341
    Points
    341
    Par défaut
    Merci pour vos réponses.

    Je vais d'abord étudier la piste de Fry avec la fonction getFileFromURL, si elle marche à peu près comme je l'imagine, ce sera la solution la plus simple pour moi.

    Je reposterai ici comment elle marche.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    336
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 336
    Points : 341
    Points
    341
    Par défaut
    Merci Fry pour la piste API Windows... c'était la bonne.

    Voilà donc comment j'ai résolu le pb, le code se résume en une ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	URLDownloadToFile(0,"http://rapidfire.sci.gsfc.nasa.gov/subsets/AERONET_Carpentras/2006284/AERONET_Carpentras.2006284.terra.2km.jpg","c:\\test.jpg",0,0);
    en ayant pris soin d'inclure le fichier #include "UrlMon.h" et d'ajouter la librairie Urlmon.lib (attention pas de majuscule au M, contrairement au .h).

  6. #6
    Membre averti
    Homme Profil pro
    Game Graphics Programmer
    Inscrit en
    Août 2006
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Game Graphics Programmer
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 408
    Points : 392
    Points
    392
    Par défaut
    Il n'y pas que libcurl ou l'API Windows pour les transferts.
    Voici une petite liste d'alternatives, trouvées justement sur le site de curl: http://curl.haxx.se/libcurl/competitors.html

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

Discussions similaires

  1. Copier le dernier item listbox sur son disque dur
    Par CLeBeR dans le forum VB.NET
    Réponses: 1
    Dernier message: 31/03/2013, 21h20
  2. Stocker une hashmap et une liste d'hashmap sur son disque dur
    Par vivelapsp dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 19/11/2011, 20h10
  3. Réponses: 2
    Dernier message: 03/09/2010, 19h31
  4. Réponses: 2
    Dernier message: 31/08/2005, 14h29

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