Partage
  • Partager sur Facebook
  • Partager sur Twitter

[C/C++] Télécharger un fichier

    7 décembre 2005 à 17:58:03

    Bonjour à tous ^^

    En fait j'aimerai simplement savoir comment en C/C++ télécharger un fichier à partir d'un serveur HTTP :)

    Merci ;)
    • Partager sur Facebook
    • Partager sur Twitter
      7 décembre 2005 à 18:34:31

      Alors là, pour avoir tenté, je te le dis, tu t'attaque à du gros. Comme toute connexion, tu passes par un socket, tu te connectes au serveur, tu lui balance une requête (type GET si je me souviens bien) et à tu récupère dans ton buffer de réception la réponse du serveur, qui n'est pas que le fichier seul. Y'a un entête et tout
      • Partager sur Facebook
      • Partager sur Twitter
        7 décembre 2005 à 18:59:36

        Sous Windows il existe une fonction qui fait ça tout cuit si je me souviens, faut voir avec WinInet ou un truc du genre.

        http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wininet/wininet/internetopenurl.asp
        • Partager sur Facebook
        • Partager sur Twitter
          7 décembre 2005 à 19:01:26

          Oui si tu veux faire ça tu as soit la possibilité des sockets (mais bon euh faut être courageux) ou alors tu trouve des bibliothèques qui t'automatise un minimum la tâche genre les classes wxHTML, wxFTP, wxURL.. etc de WxWidgets ou enfin tu utilise un IDE (payant le plus souvent) qui automatise la tâche complètement
          • Partager sur Facebook
          • Partager sur Twitter
            7 décembre 2005 à 19:29:10

            le mieux pour ca, c'est quand meme libCURL :
            http://curl.haxx.se/libcurl/
            • Partager sur Facebook
            • Partager sur Twitter
              7 décembre 2005 à 20:21:17

              Je ne remets pas en cause le fait qu'une petite librarie faite pour ça est le mieux.
              Mais là je suis en train de faire une appli wxWidget et ça m'amuse de voir à quel point c'est facile avec :)

              Je ne viens pas dire "c'est comme ça qu'il faut faire" mais juste "regardez ça, pfiou je pensais pas que ça pouvait être aussi simple" :

              wxURL url("http://www.siteduzero.com/Templates/images/designs/2/logo_sdz_fr.png");
                if (url.GetError() != wxURL_NOERR)
                      return;
                wxFileOutputStream local_picture("../trash/test.png");
                wxInputStream * distant_picture = url.GetInputStream();
                 distant_picture->Read(local_picture);
              • Partager sur Facebook
              • Partager sur Twitter
                7 décembre 2005 à 20:46:58

                Comme je disais vive wxWidgets :D
                • Partager sur Facebook
                • Partager sur Twitter
                  7 décembre 2005 à 21:33:51

                  Merci à vous tous mais wxWidget ne marche pas :(

                  Voici le code (merci Kayl):


                  #include <stdio.h>
                  #include <stdlib.h>
                  #include <wx/url.h>

                  int main(int argc, char *argv[])
                  {
                    printf("Telechargement en cours...\n");
                   
                  wxURL url("http://www.siteduzero.com/Templates/images/designs/2/logo_sdz_fr.png");
                    if (url.GetError() != wxURL_NOERR)
                          return;
                    wxFileOutputStream local_picture("./test.png");
                    wxInputStream * distant_picture = url.GetInputStream();
                     distant_picture->Read(local_picture);
                   
                    printf("\nTelechargement termine!\n");
                   
                    system("PAUSE");     
                    return 0;
                  }


                  Et voici le log de la compilation:


                  Compilateur: Default compiler
                  Building Makefile: "C:\Documents and Settings\Tux\Mes documents\TMM\Makefile.win"
                  Exécution de make...
                  make.exe -f "C:\Documents and Settings\Tux\Mes documents\TMM\Makefile.win" all
                  gcc.exe -c main.c -o main.o -I"C:/Dev-Cpp/include"

                  In file included from C:/Dev-Cpp/include/wx/defs.h:21,
                  from C:/Dev-Cpp/include/wx/url.h:19,
                  from main.c:3:

                  C:/Dev-Cpp/include/wx/platform.h:260:22: wx/setup.h: No such file or directory

                  In file included from C:/Dev-Cpp/include/wx/platform.h:263,
                  from C:/Dev-Cpp/include/wx/defs.h:21,
                  from C:/Dev-Cpp/include/wx/url.h:19,
                  from main.c:3:
                  C:/Dev-Cpp/include/wx/chkconf.h:84:9: #error "wxUSE_DYNLIB_CLASS must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:92:9: #error "wxUSE_EXCEPTIONS must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:100:9: #error "wxUSE_FILESYSTEM must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:113:9: #error "wxUSE_DYNAMIC_LOADER must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:121:9: #error "wxUSE_LOG must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:129:9: #error "wxUSE_LONGLONG must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:137:9: #error "wxUSE_MIMETYPE must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:153:9: #error "wxUSE_PROTOCOL must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:195:9: #error "wxUSE_REGEX must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:203:9: #error "wxUSE_STDPATHS must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:211:9: #error "wxUSE_XML must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:219:9: #error "wxUSE_SOCKETS must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:227:9: #error "wxUSE_STREAMS must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:235:9: #error "wxUSE_STOPWATCH must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:243:9: #error "wxUSE_TEXTBUFFER must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:251:9: #error "wxUSE_TEXTFILE must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:259:9: #error "wxUSE_UNICODE must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:267:9: #error "wxUSE_URL must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:285:9: #error "wxUSE_ACCEL must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:293:9: #error "wxUSE_BMPBUTTON must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:301:9: #error "wxUSE_BUTTON must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:309:9: #error "wxUSE_CALENDARCTRL must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:317:9: #error "wxUSE_CARET must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:325:9: #error "wxUSE_CHECKBOX must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:341:9: #error "wxUSE_CHOICE must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:349:9: #error "wxUSE_CHOICEBOOK must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:357:9: #error "wxUSE_CHOICEDLG must be defined."

                  C:/Dev-Cpp/include/wx/chkconf.h:365:9: #error "wxUSE_CLIPBOARD must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:373:9: #error "wxUSE_COLOURDLG must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:381:9: #error "wxUSE_COMBOBOX must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:389:9: #error "wxUSE_DATAOBJ must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:397:9: #error "wxUSE_DATEPICKCTRL must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:405:9: #error "wxUSE_DISPLAY must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:413:9: #error "wxUSE_DOC_VIEW_ARCHITECTURE must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:421:9: #error "wxUSE_FILEDLG must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:429:9: #error "wxUSE_FONTDLG must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:437:9: #error "wxUSE_FONTMAP must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:445:9: #error "wxUSE_GAUGE must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:453:9: #error "wxUSE_GRID must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:461:9: #error "wxUSE_HELP must be defined."

                  C:/Dev-Cpp/include/wx/chkconf.h:469:9: #error "wxUSE_HTML must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:477:9: #error "wxUSE_XRC must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:498:9: #error "wxUSE_ICO_CUR must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:506:9: #error "wxUSE_IFF must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:514:9: #error "wxUSE_IMAGLIST must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:522:9: #error "wxUSE_JOYSTICK must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:530:9: #error "wxUSE_LISTBOOK must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:538:9: #error "wxUSE_LISTBOX must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:546:9: #error "wxUSE_LISTCTRL must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:554:9: #error "wxUSE_LOGGUI must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:562:9: #error "wxUSE_LOGWINDOW must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:570:9: #error "wxUSE_LOG_DIALOG must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:578:9: #error "wxUSE_MDI must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:586:9: #error "wxUSE_MDI_ARCHITECTURE must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:594:9: #error "wxUSE_MENUS must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:602:9: #error "wxUSE_MSGDLG must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:610:9: #error "wxUSE_NOTEBOOK must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:618:9: #error "wxUSE_PALETTE must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:626:9: #error "wxUSE_POPUPWIN must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:634:9: #error "wxUSE_PRINTING_ARCHITECTURE must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:642:9: #error "wxUSE_RADIOBOX must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:650:9: #error "wxUSE_RADIOBTN must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:658:9: #error "wxUSE_SASH must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:666:9: #error "wxUSE_SCROLLBAR must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:674:9: #error "wxUSE_SLIDER must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:682:9: #error "wxUSE_SOUND must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:690:9: #error "wxUSE_SPINBTN must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:698:9: #error "wxUSE_SPINCTRL must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:706:9: #error "wxUSE_SPLASH must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:714:9: #error "wxUSE_SPLITTER must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:722:9: #error "wxUSE_STATBMP must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:730:9: #error "wxUSE_STATBOX must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:738:9: #error "wxUSE_STATLINE must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:746:9: #error "wxUSE_STATTEXT must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:754:9: #error "wxUSE_STATUSBAR must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:762:9: #error "wxUSE_TAB_DIALOG must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:770:9: #error "wxUSE_TEXTCTRL must be defined."

                  C:/Dev-Cpp/include/wx/chkconf.h:778:9: #error "wxUSE_TIPWINDOW must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:786:9: #error "wxUSE_TOOLBAR must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:794:9: #error "wxUSE_TOOLTIPS must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:802:9: #error "wxUSE_TREECTRL must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:810:9: #error "wxUSE_VALIDATORS must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:818:9: #error "wxUSE_WXHTML_HELP must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:1184:13: #error "wxUSE_UNICODE_MSLU must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:1191:13: #error "wxUSE_UXTHEME must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:1198:13: #error "wxUSE_UXTHEME_AUTO must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:1205:13: #error "wxUSE_MS_HTML_HELP must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:1212:13: #error "wxUSE_DIALUP_MANAGER must be defined."
                  C:/Dev-Cpp/include/wx/chkconf.h:1609:9: #error "wxMessageBox is always needed"
                  main.c: In function `main':
                  main.c:9: error: `wxURL' undeclared (first use in this function)
                  main.c:9: error: (Each undeclared identifier is reported only once
                  main.c:9: error: for each function it appears in.)
                  main.c:9: error: syntax error before "url"
                  main.c:10: error: `url' undeclared (first use in this function)
                  main.c:10: error: `wxURL_NOERR' undeclared (first use in this function)
                  main.c:12: error: `wxFileOutputStream' undeclared (first use in this function)
                  main.c:12: error: syntax error before "local_picture"
                  main.c:13: error: `wxInputStream' undeclared (first use in this function)
                  main.c:13: error: `distant_picture' undeclared (first use in this function)

                  main.c:14: error: `local_picture' undeclared (first use in this function)

                  make.exe: *** [main.o] Error 1

                  Exécution terminée


                  Quelqu'un sait qu'est qui ne va pas?

                  Merci ^^
                  • Partager sur Facebook
                  • Partager sur Twitter
                    7 décembre 2005 à 21:49:57

                    Au début :

                    #include "wx/wxprec.h"

                    #ifndef WX_PRECOMP
                    #include "wx/wx.h"
                    #endif

                    Après je vais pas répeter le contenu du wiki :
                    http://wiki.wxwidgets.org/wiki.pl?Dev-CPP_Setup_Guide

                    Ici si tu ne veux faire QUE ça (choper un fichier) sortir l'armada wxWidgets est pas forcément nécessaire.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      8 décembre 2005 à 17:22:43

                      Si j'ai le temps je te ferais ça en WinSock ;)
                      • Partager sur Facebook
                      • Partager sur Twitter
                        8 décembre 2005 à 21:30:20

                        Je trouve quand meme que utiliser Wininet ca reste le plus simple. C'est vraiment pas compliquer de l'utiliser , les fonctions sont toutes faites. Suffit de trouver un bon exemple sur internet et c'est parti.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          8 décembre 2005 à 23:53:23

                          J'avoue sur WinSock faut tout faire à la main mais bon ça fait à peine 20 lignes :D
                          • Partager sur Facebook
                          • Partager sur Twitter

                          [C/C++] Télécharger un fichier

                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                          • Editeur
                          • Markdown