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

GTK+ avec C & C++ Discussion :

Erreurs affichage d'un fichier dans un textview


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Inscrit en
    Juin 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 3
    Par défaut Erreurs affichage d'un fichier dans un textview
    Bonjour,
    Voilà, je réalise la partie graphique d'un projet qui consiste en la réalisation d'un mini-chat en C. Pour cela j'utilise GTK+. Pour la gestion du chat en lui-même, j'ai décidé que les entrées saisies au clavier seraient enregistrées dans un fichier, puis que ce fichier serait lu et affiché dans une zone de texte juste au dessus de la zone de saisie.
    Sauf que je n'ai encore jamais réussi à faire fonctionner le code. Il compile sans erreur (avec un certain nombre de warning, certes), mais lorsqu'on clique sur "entrer" pour valider le texte écrit dans la zone de saisie, cela sort des erreurs. Comme je suis un peu embrouillée au niveau des pointeurs et compagnie, j'essaie desesperemment de bidouiller les quelques lignes qui posent problèmes, mais je récupère erreur sur erreur, que ce soit un probleme de violation d'accès, ou bien des erreurs de type "debug assertion failed" à cause des fonctions fgets, fclose, etc..

    En desespoir de cause, j'espere obtenir un peu d'aide ici.
    Voici le code:

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    #include <gtk/gtk.h>
    #include <stdio.h> 
     
    static GtkWidget *Texte_affich;
    static GtkWidget* Texte;
     
    void OnEnter(GtkWidget *Texte, gpointer data);
     
    int main(int argc, char** argv[])
    {
    GtkWidget* Fenetre;
    GtkWidget* Box_verti;
    GtkWidget* Enter;
    GtkWidget* Scroll;
    gtk_init(&argc, &argv);
     
    Fenetre = gtk_window_new(GTK_WINDOW_TOPLEVEL); 
    gtk_window_set_default_size(GTK_WINDOW(Fenetre), 500, 500); 
    gtk_window_set_title(GTK_WINDOW(Fenetre), "Mini-chat");
    g_signal_connect(G_OBJECT(Fenetre),"destroy",G_CALLBACK(gtk_main_quit),0);
     
    Box_verti=gtk_vbox_new(FALSE,5); 
    gtk_container_add(GTK_CONTAINER(Fenetre),Box_verti);
     
    Scroll = gtk_scrolled_window_new(NULL, NULL);
    gtk_box_pack_start(GTK_BOX(Box_verti), Scroll, TRUE, TRUE, 5);
     
    Texte_affich=gtk_text_view_new();
    gtk_container_add(GTK_CONTAINER(Scroll),Texte_affich);
    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(Scroll), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
     
    Texte = gtk_entry_new();
    gtk_box_pack_start(GTK_BOX(Box_verti),Texte, TRUE, TRUE, 0);
     
    Enter=gtk_button_new_with_label("Entrer");
    gtk_box_pack_start(GTK_BOX(Box_verti),Enter,FALSE,FALSE,0);
    g_signal_connect(G_OBJECT(Enter),"clicked",G_CALLBACK(OnEnter),NULL);
     
    gtk_widget_show_all(Fenetre);
     
    gtk_main(); 
     
    return 0; 
    } 
     
     
    void OnEnter(GtkWidget *Enter, gpointer data)
    {
    GtkTextBuffer *buffer;
    GtkTextIter start;
    GtkTextIter end;
    FILE *fichier_affichage;
    const gchar *chemin;
    gchar lecture[1024];
    gchar *sText, *sFile;
     
     
    /*Recuperation texte*/
    sText = gtk_entry_get_text(GTK_ENTRY(Texte));
    /*Ouverture du fichier*/
    fichier_affichage = fopen("Fichier_affichage", "w");
    /*Ecriture fichier*/
    fprintf(fichier_affichage, "%s", sText);
    fclose(fichier_affichage);
    sFile = "fichier_affichage";
     
    buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(Texte_affich));
    fichier_affichage = fopen(fichier_affichage,"rt");
     
    gtk_text_buffer_get_start_iter(buffer,&start);
    gtk_text_buffer_get_end_iter(buffer,&end);
    gtk_text_buffer_delete(buffer, &start, &end);
     
     
    g_file_get_contents(sFile, lecture, NULL, NULL);
    gtk_text_buffer_get_start_iter(buffer,&start);
    gtk_text_buffer_insert(buffer, &start, lecture, -1);
     
    fclose(fichier_affichage);
    }
    Les erreurs commencent à apparaitre dans la toute dernière partie de la fonction, lorsqu'on parle de buffer etc..bref, dès qu'il s'agit de réafficher le fichier dans la fenetre.
    Merci d'avance.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 172
    Par défaut
    essaye ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void                gtk_text_buffer_set_text            (GtkTextBuffer *buffer,
                                                             const gchar *text,
                                                             gint len);
     
    Deletes current contents of buffer, and inserts text instead. If len is -1, text must be nul-terminated. text must be valid UTF-8.
     
    buffer :
    	a GtkTextBuffer
     
    text :
    	UTF-8 text to insert
     
    len :
    	length of text in bytes

  3. #3
    Candidat au Club
    Inscrit en
    Juin 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 3
    Par défaut
    J'ai ajouté la ligne (j'espère correctement), mais à dire vrai actuellement, ca n'a l'air de lui faire ni chaud ni froid, vu qu'il me renvoit une erreur de type debug assertion failed sur la ligne 47 (donc la declaration de la fonction en fait), avec comme erreur expression: stream != NULL
    Donc, la même erreur qu'avant en le code en état (mais je bidouille tellement pour voir ce qui fonctionnerait que j'ai peur que ca devienne de plus en plus confus...)

  4. #4
    Candidat au Club
    Inscrit en
    Juin 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 3
    Par défaut
    Apparemment, il y avait déjà une erreur au niveau du fopen, j'ai remplacé
    fichier_affichage = fopen(fichier_affichage,"rt");
    par
    fichier_affichage = fopen("Fichier_affichage","rt");

    Maintenant, j'ai une erreur console (plus la fenetre d'erreur windows de debug) qui dit "gtk_text_buffer_emit_insert : assertion 'g_utf8_validate(text, len, NULL)' failed"

Discussions similaires

  1. Affichage d'un fichier dans un composant Memo
    Par nassimanocus dans le forum Débuter
    Réponses: 2
    Dernier message: 01/04/2013, 15h55
  2. Affichage d'infos fichier dans l'explorateur
    Par Gaetch dans le forum Windows 7
    Réponses: 3
    Dernier message: 31/03/2011, 17h01
  3. Réponses: 1
    Dernier message: 05/02/2008, 12h21
  4. [Servlet]POI et affichage d'un fichier excel dans IE
    Par vseb99 dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 08/02/2006, 13h59
  5. Réponses: 1
    Dernier message: 07/01/2006, 21h10

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