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 :

Enregistrer un fichier texte sous GTK+


Sujet :

GTK+ avec C & C++

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Enregistrer un fichier texte sous GTK+
    J'ai un problème quand je recharge un fichier enregistré grace à ma fonction "OnSave"
    Le fichier m'affiche des caractères illisibles. Apparement j'ai un problème avec le buffer :



    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
    void OnSave(GtkWidget* widget, gpointer data)
    {
      GtkWidget *pSave=NULL;
      pSave = gtk_file_chooser_dialog_new ("Save File as ...",
    						GTK_WINDOW(data),
      				      GTK_FILE_CHOOSER_ACTION_SAVE,
      				      GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
      				      GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
      				      NULL);
      gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (pSave), TRUE);
      gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (pSave), "Untitled.");
     
     
     
      if (gtk_dialog_run (GTK_DIALOG (pSave)) == GTK_RESPONSE_ACCEPT)
      {
        gchar *filename;
        filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (pSave));
    	/* save the output */
     
        FILE* fichier = NULL;
        long lsize;
        char save [2048];
        char buffer[256];
        fichier = fopen(filename, "w");
     
        if (fichier != NULL)
        {
     
        	time_t timestamp = time(NULL);
     
    	fseek (fichier , 0 , SEEK_END);
      	lsize = ftell (fichier);  
     
    	fread( save, 1, lsize, fichier);
        	strftime(buffer, sizeof(buffer), "%A %d %B %Y - %X.", localtime(&timestamp));
     
    	fputs("Fichier enregistré le ",fichier);
    	fputs(buffer,fichier);
    	fputs("\nHistorique de votre référence\n\n\n",fichier);
            fputs(save, fichier);
            fclose(fichier);
        }
     
        free (buffer);
        free (save);
        g_free (filename);
      }
     
      gtk_widget_destroy (pSave);
    }

  2. #2
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Points : 2 002
    Points
    2 002
    Par défaut
    Simplifie toi le boulot et utilise g_file_set_contents.
    Documentation officielle GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels par l'exemple (platform-demos):
    GTK (tous langages)

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    J'ai des erreurs de segemntations quand je l'utulise.

  4. #4
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Points : 1 633
    Points
    1 633
    Par défaut
    Ca sent la corruption mémoire dans les données que tu essaies de sauver.

  5. #5
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Points : 2 002
    Points
    2 002
    Par défaut
    Citation Envoyé par tony952 Voir le message
    J'ai des erreurs de segemntations quand je l'utulise.
    Parsème des dans le code, ou lance un déboguer, pour voir à quel moment ça plante... Parce que là tu ne nous donne pas beaucoup d'infos utiles...
    Documentation officielle GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels par l'exemple (platform-demos):
    GTK (tous langages)

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Je ne sais pas bien utiliser cette fonction : g_file_set_contents () en fait.
    Quelqu'un aurait un exemple d'utilisation pour que je vois à quoi ça ressemble (non je ne demande pas qu'on me serve le code sur un plateau doré).

    Pour rappel je cherche à savoir pouquoi ma fonction ne fonctionne pas, et que voulez vous dire par corruption mémoire ?

  7. #7
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Montre le code que tu as fait
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  8. #8
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Il est au dessus

  9. #9
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Points : 1 633
    Points
    1 633
    Par défaut
    Citation Envoyé par tony952 Voir le message
    Pour rappel je cherche à savoir pouquoi ma fonction ne fonctionne pas, et que voulez vous dire par corruption mémoire ?
    Libération par 2 fois de la même zone mémoire (double-free), écriture hors des limites d'un tableau, ...

  10. #10
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par tony952 Voir le message
    Il est au dessus
    Je parle de la nouvelle version, celle où tu utilises g_file_set_contents !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  11. #11
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Points : 2 002
    Points
    2 002
    Par défaut
    Déjà la grosse boulette : tu fais un free (buffer) et free (save) alors que ces deux buffers ont été alloués dans la pile... Tu m'étonnes que ça segfault. Tu n'as à appeler free que sur de la mémoire allouée dynamiquement, c'est à dire avec un appel à malloc(). Supprime ces deux lignes, ça devrait mieux fonctionner.
    Documentation officielle GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels par l'exemple (platform-demos):
    GTK (tous langages)

Discussions similaires

  1. Enregistrement d'un fichier texte sous un autre nom
    Par wafa_ba dans le forum Général Python
    Réponses: 1
    Dernier message: 16/01/2014, 05h46
  2. [WM18] Comment enregistrer des valeurs dans un fichier texte sous IOS
    Par nico78 dans le forum Windev Mobile
    Réponses: 1
    Dernier message: 26/08/2013, 16h13
  3. Réponses: 2
    Dernier message: 06/08/2007, 14h54
  4. Comment ouvrir un fichier text sous Java ?
    Par mpascolo dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 11/10/2006, 15h59
  5. feof et fichier texte sous unix
    Par Magicmax dans le forum C
    Réponses: 7
    Dernier message: 07/12/2005, 09h16

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