Forum Programmation.c++ try catch et URL sous wxWidgets

Posté par  (site web personnel) .
Étiquettes : aucune
0
2
juil.
2004
Y a-t-il un mécanisme de type try ... catch pour rattraper les erreurs lorsque l'on travaille avec wxWidgets (apparamment wxWidgets n'offre rien à ce niveau...) ?

En fait, certaines URLS (http://www.monsite.com/directory(...) plante, tandis que http://www.monsite.com/fichier.htm(...) fonctionne bien) semblent faire planter le programme lorsque je les ouvre (qqn a-t-il déjà rencontré ce problème et a-t-il su le résoudre)... Le code ressemble à ceci :

filename = wxURL::ConvertToValidURI( filename );
wxURL url(filename);

if ( url.GetError() != wxURL_NOERR )
{
return false;
}

if ( (in_stream = url.GetInputStream()) )
{
.....
  • # try catch

    Posté par  (site web personnel) . Évalué à 2.

    Pour les try catch, il y a mais il faut changer les options de compilation sous Dev-C++. Ajout de la commande : -fexceptions .
  • # Exemples plus précis

    Posté par  (site web personnel) . Évalué à 2.

    Pour donner une idée plus précise :
    URL qui ne fonctionne pas : http: //www.zdnet.fr/feeds/rss/actualites/
    URL qui ne fonctionne pas : http: //www.clubic.com/c/xml.php?type=news
    URL qui fonctionne : http: //www.vnunet.fr/rssrdf/news.xml
  • # J'ai trouvé

    Posté par  (site web personnel) . Évalué à 2.

    Finalement, j'ai trouvé le problème.

    En fait, pour certaines URLs (en pratique, celles citées plus haut), la taille du flux ne peut pas être extraite. La fonction qui renvoit la taille renvoit donc -1.

    Dans ce cas, il faut utiliser GetC (ce qui semble plus lent) plutôt que Read et boucler tant que LastRead est égal à 1 (Eof ne marche pas non plus dans ce cas et il faut donc utiliser LastRead).
    • [^] # Re: J'ai trouvé

      Posté par  (site web personnel) . Évalué à 2.

      Et ceci (à améliorer) fonctionne pas trop mal pour lire les fichiers CSV.

      bool fgetcsv (wxTextInputStream text, wxString tagfield1, wxString tagfield2, wxArrayString *data)
      {
      wxString token;
      wxString line;
      int i = 0;

      data->Empty();

      line = text.ReadLine();

      if (line)
      {
      wxStringTokenizer tkz(line, tagfield1);
      while ( tkz.HasMoreTokens() )
      {
      token = tkz.GetNextToken();
      token.Replace(tagfield2, "");
      token = token.Trim();
      if (token)
      data->Add (token);
      i++;
      }
      }
      else
      return false;
      return true;
      }

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.