Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1719 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Lire un fichier web en C++ avec wxWidgets

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Lire un fichier web en C++ avec wxWidgets

n°864203
ecocentric
Posté le 04-10-2004 à 14:41:42  profilanswer
 

Bonjour,  
J'ai écrit une fonction en C++ avec wxWidgets pour récupérer une page Web. Mon problème, c'est que la lecture d'un ensemble de fichiers est fortement ralentie par des serveurs down ou très lents / surchargés. La fonction passe alors son temps à attendre. Je souhaiterai donc pouvoir mettre un time out à la lecture du fichier ou à défaut ajouter une fonction préalable qui teste l'accessibilité de la page à récupérer.  
Par contre je ne vois pas du tout comment faire.  
Quelqu'un peut-il m'éclairer ?
Merci d'avance pour les idées : le code source actuel est en dessous.  
RV.  
 

Citation :


bool readflux (wxString filename, wxString *filecontent)
{
    wxInputStream *in_stream = NULL;
    int ReadMode             = 1;
 
    // DEBUT LECTURE DU FICHIER DISTANT    
    filename = wxURL::ConvertToValidURI( filename );
    wxURL url(filename);
     
 if ( url.GetError() != wxURL_NOERR )
 {
     // erreur : problème lors de l'analyse de l'URL
        return false;
    }    
 
    wxChar *data = NULL;
    size_t size  = 0;
 
    try  
    {
        // essai pour ouvrir le flux
        in_stream = url.GetInputStream();  
    }
    catch (...)
    {
        // erreur : problème à l'ouverture du flux RSS.
        return false;
    }
     
    //////////////////////////////////////////////////
    if ( in_stream )
    {
        // le fichier distant a pu être ouvert
        try  
        {
             size = in_stream->StreamSize();
        }
        catch (...)
        {
             // erreur : la demande de la taille du fichier a causé une erreur.
             ReadMode = 2;
        }
    }
    else
    {
        // le fichier distant n'a pas pu être ouvert
        return false;
    }
    //////////////////////////////////////////////////    
 
    //////////////////////////////////////////////////    
    // certains fichiers http renvoient leur taille => on passe par Read
    // d'autres renvoient -1 => on passe par GetC (ce est plus lent)
    if ((int)size > 0)
        ReadMode = 1;
    else
        ReadMode = 2;
    //////////////////////////////////////////////////
     
    //////////////////////////////////////////////////
    wxString temp;
    if (ReadMode==1)
    {
        if (size > 0)
            try  
            {
                 data = new wxChar[size];
            }
            catch (...)
            {
                 // erreur : la création du conteneur a échoué
                 return false;
            }
        else
        {
            // le fichier est de taille nulle ou indéterminée.
            return false;
        }
         
        try
        {
             // essai de lire dans le flux
             if (!in_stream->Read(data, size))
             {
                 // la lecture du fichier distant a échoué
                 if (in_stream)   delete in_stream;
                 if (data)        delete data;                        
                 return false;
             }
             else
             {
                 wxString _data (data, size);
                 temp = _data;
                 // la lecture du fichier distant a réussi
             }  
        }
        catch (...)
        {
            if (in_stream)   delete in_stream;
            if (data)        delete data;
            return false;
        }    
    }
    else
    {
        try
        {
            char c; size = 0;
            do
            {
                c=in_stream->GetC();
                size++;  
                temp.Append (c);        
            }
            while (in_stream->LastRead()>0);
        }
        catch (...)
        {
            // erreur a la lecture du fichier caractere par caractere
            if (in_stream)   delete in_stream;
            if (data)        delete data;
            return false;
        }
    }
     
    // liberation memoire
    if (in_stream)   delete in_stream;
    if (data)        delete data;
    // FIN LECTURE FICHIER DISTANT
    *filecontent = temp;
    return true;
}


 
Cordialement.

mood
Publicité
Posté le 04-10-2004 à 14:41:42  profilanswer
 

n°1165309
Gurtle
BORF !!!!
Posté le 29-07-2005 à 23:20:58  profilanswer
 

Salut,
 
Essaye de pinger le serveur ou est situe la page tu sauras si il est up.
Pour le time out mets une tampo apres la demande d'acces au site.


---------------
ce serait bien si ce serait mieux

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Lire un fichier web en C++ avec wxWidgets

 

Sujets relatifs
Un programme qui trie ce qu'il y a dans le fichier txtcomment ouvrir un fichier php
[JAVA] generer un fichier bat windows depuis du code java pb encodingComment inclure un fichier word ds du html?
insertion fichier existant + version windowspb upload fichier + insertion base
Garder les dernieres lignes d'un fichier texteFichier .BAT
Win32 API : Lire la charge CPU [Résolu]Fichier .bat contenant des commandes msdos, faire un retour chariot??
Plus de sujets relatifs à : Lire un fichier web en C++ avec wxWidgets


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR