begin process at 2012 05 27 15:52:33
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Applications Linux

 > EASY-SAUVEGARDE

EASY-SAUVEGARDE


 Information sur la source

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Applications Linux Classé sous :gtk, linux, fichier, sauvegarde, fichiers Niveau :Débutant Date de création :05/01/2006 Date de mise à jour :08/01/2006 11:59:22 Vu :6 346

Auteur : cyber_securite

Ecrire un message privé
Site perso
Commentaire sur cette source (33)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Voici ma toute première source !!! J'ai appris le C par moi même. Ce programme n'apporte rien de véritablement nouveau ni de spécial. Je voudrais juste avoir des critiques afin de progresser. Et surtout, allez-y !!!

Donc ce petit utilitaire permet de sauvegarder la configuration de Linux (Ubuntu) ! Il sauvegarde quatres fichiers:
1) /etc/X11/xorg.conf
2) /etc/environment
3) /etc/locale.gen
4)/etc/apt/sources.list

Puis permet de les restaurer par la suite. Je vous répète ceci est ma toute PREMIERE source mais que cela nous empêche pas de la critiquer.

Merci, bye...

Source

  • //Inclusion des librairies
  • #include <stdio.h>
  • #include <string.h>
  • #include <gtk/gtk.h>
  • #include <stdlib.h>
  • //Déclaration des constantes des noms des fichiers
  • #define CHEMIN_XORG "/etc/X11/xorg.conf"
  • #define CHEMIN_ENVIRONMENT "/etc/environment"
  • #define CHEMIN_LOCAL "/etc/locale.gen"
  • #define CHEMIN_SOURCES "/etc/apt/sources.list"
  • //Déclaration des différents textes présent dans le programme
  • #define TEXTE_1 TEXTE_7" vous permettra de sauvegarder,\nen un clique, toute la configuration de votre installation\nUbuntu et, ainsi, la restaurer lors d'une prochaine\nréinstallation."
  • #define TEXTE_2 "Cet utilitaire,developpé en C/Gtk, permet d'exporter la configuration systeme de votre ordinateur afin de la restaurer lorsque vous le réinstallerez.\n\nVoici la listes des fichiers sauvegardés:\n1) "CHEMIN_XORG"\n2) "CHEMIN_ENVIRONMENT"\n3) "CHEMIN_LOCAL"\n4) "CHEMIN_SOURCES"\n\nVersion: 0.0.2\nDate: 06/01/06"
  • #define TEXTE_3 "Où voulez-vous sauvegarder votre configuration ?"
  • #define TEXTE_4 "Sauvegarder"
  • #define TEXTE_5 "Restaurer"
  • #define TEXTE_6 "À propos"
  • #define TEXTE_7 "Easy-Sauvegarde"
  • #define TEXTE_8 "La sauvegarde s'est corretement déroulée"
  • #define TEXTE_9 "Ouvrez le dossier où se trouve la sauvegarde..."
  • #define TEXTE_10 "La restauration de votre configuration s'est bien déroulée.\n\nUne copie des fichiés originaux a été faite dans leurs répertoires."
  • #define NOM_FICHIER_SAUVEGARDE "ConfigSauvegarde"
  • #define ERREUR_1 "Impossible d'ouvrir le fichier. Vérifiez que vous êtes bien en administrateur."
  • #define ERREUR_2 "Attention:\nLe fichier de sauvegarde ne peut être réutilisé car il comporte des erreurs. Il a sans doute du être modifié entre temps."
  • #define ERREUR_3 "Attention:\nUn des fichiers n'a pas été trouvé sur votre ordinateur. La sauvegarde ne peut pas être faite."
  • #define ERREUR_4 "Attention:\nAucun fichier correspondant n'a été trouvé dans ce répertoire.\n\nLe fichier ce nomme "NOM_FICHIER_SAUVEGARDE"."
  • //Déclaration des procédures
  • void sauvegarde();
  • void restauration();
  • void a_propos();
  • void erreur(int erreur);
  • ////////////////////////////////////////////////////////////////////////////////
  • //Fonction principale
  • int main(int argc, char **argv)
  • {
  • //Déclaration des Widget
  • GtkWidget *pWindow;
  • GtkWidget *pVBox;
  • GtkWidget *pHBox;
  • GtkWidget *pLabel;
  • GtkWidget *pButton[2];
  • GtkWidget *pFrame;
  • //Initiation de GTK
  • gtk_init(&argc,&argv);
  • //Création de notre fenêtre principale
  • pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  • gtk_window_set_title(GTK_WINDOW(pWindow), TEXTE_7 );
  • gtk_window_set_default_size(GTK_WINDOW(pWindow), 385, 160);
  • gtk_window_set_position(GTK_WINDOW(pWindow), GTK_WIN_POS_CENTER);
  • g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(gtk_main_quit), NULL);
  • gtk_container_set_border_width(GTK_CONTAINER (pWindow), 10);
  • //Déclaration des labels
  • pLabel = gtk_label_new( TEXTE_1 );
  • //Déclaration des bouttons
  • pButton[0] = gtk_button_new_with_label( TEXTE_4 );
  • pButton[1] = gtk_button_new_with_label( TEXTE_5 );
  • pButton[2] = gtk_button_new_with_label( TEXTE_6 );
  • //Association des actions aux boutons
  • g_signal_connect(G_OBJECT( pButton[0] ), "clicked", sauvegarde, NULL);
  • g_signal_connect(G_OBJECT( pButton[1] ), "clicked", restauration, NULL);
  • g_signal_connect(G_OBJECT( pButton[2] ), "clicked", a_propos, NULL);
  • //Construction des conteneurs
  • pVBox = gtk_vbox_new(FALSE, 0);
  • pHBox = gtk_hbox_new(FALSE, 3);
  • //Construction des frames
  • pFrame = gtk_frame_new("Avant propos:");
  • //Ajout dans les conteneurs
  • gtk_container_add(GTK_CONTAINER(pWindow), pVBox);
  • gtk_box_pack_start(GTK_BOX(pVBox), pFrame, false, false, 0);
  • gtk_container_add(GTK_CONTAINER( pFrame ), pLabel );
  • gtk_box_pack_end(GTK_BOX(pVBox), pHBox, false, false, 0);
  • gtk_box_pack_start(GTK_BOX(pHBox), pButton[0], false, false, 10);
  • gtk_box_pack_start(GTK_BOX(pHBox), pButton[1], false, false, 10);
  • gtk_box_pack_end(GTK_BOX(pHBox), pButton[2], false, false, 10);
  • //Affichage de notre fenêtre
  • gtk_widget_show_all(pWindow);
  • //Lancement de notre boucle
  • gtk_main();
  • return 0;
  • }
  • ////////////////////////////////////////////////////////////////////////////////
  • //Fonction de sauvegarde
  • void sauvegarde(){
  • //Déclaration des Widget et des variables
  • GtkWidget *pFileSelection;
  • GtkWidget *pDialog;
  • gchar *sChemin;
  • char adresse[512];
  • char buffer;
  • int resultat_choix;
  • //Création de la fenêtre du choix de l'emplacement pour la sauvegarde
  • pFileSelection = gtk_file_chooser_dialog_new( TEXTE_3 ,
  • GTK_WINDOW(NULL),
  • GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
  • GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
  • GTK_STOCK_OPEN, GTK_RESPONSE_OK,
  • NULL);
  • //Affichage de la fenêtre
  • resultat_choix = gtk_dialog_run(GTK_DIALOG(pFileSelection));
  • //Traitement du retour
  • if( resultat_choix == GTK_RESPONSE_OK ){
  • //Récupération du chemin
  • sChemin = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(pFileSelection));
  • //Déclaration des pointeurs FILE
  • FILE *fichier_destination;
  • FILE *fichier_lecture;
  • //Création de l'adresse complète
  • strcpy(adresse,sChemin);
  • strcat(adresse,"/"NOM_FICHIER_SAUVEGARDE);
  • //Libération de la mémoire aloué pour sChemin
  • g_free(sChemin);
  • //Ouverture du fichier de destination
  • fichier_destination = fopen(adresse,"w");
  • //Ouverture de xorg en simple lecture
  • fichier_lecture = fopen(CHEMIN_XORG,"r");
  • //Vérification d'aucune erreur
  • if( fichier_destination == false || fichier_lecture == false){ fclose(fichier_destination);
  • remove(adresse);
  • erreur(3) ; }
  • //Ecriture premières lignes pour les informations
  • if( fputs("Ce fichier a été généré par \""TEXTE_7"\".\n",fichier_destination) == EOF ){ erreur(1) ; }
  • if( fputs("Ne surtout pas le modifier. Cela pourrait abimer votre configuration\n\n\n",fichier_destination) == EOF ){ erreur(1) ; }
  • if( fputs("==============================================================================\n",fichier_destination) == EOF ){ erreur(1) ; }
  • if( fputs(CHEMIN_XORG,fichier_destination) == EOF ){ erreur(1) ; }
  • if( fputs("\n==============================================================================\n",fichier_destination) == EOF ){ erreur(1) ; }
  • //Copie du fichier xorg
  • while( ( buffer = (char)getc(fichier_lecture) ) != EOF ){ if( putc(buffer,fichier_destination) == EOF ){ erreur(1) ; } }
  • //Changement du fichier en lecture
  • fclose(fichier_lecture);
  • fichier_lecture = fopen( CHEMIN_ENVIRONMENT ,"r");
  • //Vérification d'aucune erreur
  • if( fichier_lecture == false){ fclose(fichier_destination);
  • remove(adresse);
  • erreur(3) ; }
  • //Indication de changement de fichier
  • if( fputs("==============================================================================\n",fichier_destination) == EOF ){ erreur(1) ; }
  • if( fputs( CHEMIN_ENVIRONMENT ,fichier_destination) == EOF ){ erreur(1) ; }
  • if( fputs("\n==============================================================================\n",fichier_destination) == EOF ){ erreur(1) ; }
  • //Copie du fichier ENVIRONMENT
  • while( ( buffer = (char)getc(fichier_lecture) ) != EOF ){ if( putc(buffer,fichier_destination) == EOF ){ erreur(1) ; } }
  • //Changement du fichier en lecture
  • fclose(fichier_lecture);
  • fichier_lecture = fopen( CHEMIN_LOCAL ,"r");
  • //Vérification d'aucune erreur
  • if( fichier_lecture == false){ fclose(fichier_destination);
  • remove(adresse);
  • erreur(3) ; }
  • //Indication de changement de fichier
  • if( fputs("==============================================================================\n",fichier_destination) == EOF ){ erreur(1) ; }
  • if( fputs( CHEMIN_LOCAL ,fichier_destination) == EOF ){ erreur(1) ; }
  • if( fputs("\n==============================================================================\n",fichier_destination) == EOF ){ erreur(1) ; }
  • //Copie du fichier ENVIRONMENT
  • while( ( buffer = (char)getc(fichier_lecture) ) != EOF ){ if( putc(buffer,fichier_destination) == EOF ){ erreur(1) ; } }
  • //Changement du fichier en lecture
  • fclose(fichier_lecture);
  • fichier_lecture = fopen( CHEMIN_SOURCES ,"r");
  • //Vérification d'aucune erreur
  • if( fichier_lecture == false){ fclose(fichier_destination);
  • remove(adresse);
  • erreur(3) ; }
  • //Indication de changement de fichier
  • if( fputs("==============================================================================\n",fichier_destination) == EOF ){ erreur(1) ; }
  • if( fputs( CHEMIN_SOURCES ,fichier_destination) == EOF ){ erreur(1) ; }
  • if( fputs("\n==============================================================================\n",fichier_destination) == EOF ){ erreur(1) ; }
  • //Copie du fichier SOURCES
  • while( ( buffer = (char)getc(fichier_lecture) ) != EOF ){ if( putc(buffer,fichier_destination) == EOF ){ erreur(1) ; } }
  • //Indication de la fin de la sauvegarde
  • if( fputs("==============================================================================\n",fichier_destination) == EOF ){ erreur(1) ; }
  • if( fputs("Fin\n",fichier_destination) == EOF ){ erreur(1) ; }
  • if( fputs("==============================================================================\n",fichier_destination) == EOF ){ erreur(1) ; }
  • //Suppresion des pointeurs FILE
  • fclose(fichier_destination);
  • fclose(fichier_lecture);
  • //Affichage du message de confirmation
  • pDialog = gtk_message_dialog_new(GTK_WINDOW(pFileSelection),
  • GTK_DIALOG_MODAL,
  • GTK_MESSAGE_INFO,
  • GTK_BUTTONS_OK,
  • TEXTE_8 );
  • gtk_dialog_run(GTK_DIALOG(pDialog));
  • gtk_widget_destroy(pDialog);
  • }
  • //Destruction de la fenêtre
  • gtk_widget_destroy(pFileSelection);
  • return;
  • }
  • ////////////////////////////////////////////////////////////////////////////////
  • //Fonction A propos
  • void restauration(){
  • //Déclaration des Widget et des variables
  • GtkWidget *pFileSelection;
  • GtkWidget *pDialog;
  • gchar *sChemin;
  • char adresse[512];
  • char buffer;
  • int resultat_choix;
  • int compteur = 0;
  • char *memoire;
  • char *debut;
  • char *fin;
  • //Création de la fenêtre du choix de l'emplacement pour la sauvegarde
  • pFileSelection = gtk_file_chooser_dialog_new( TEXTE_9 ,
  • GTK_WINDOW(NULL),
  • GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
  • GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
  • GTK_STOCK_OPEN, GTK_RESPONSE_OK,
  • NULL);
  • //Affichage de la fenêtre
  • resultat_choix = gtk_dialog_run(GTK_DIALOG(pFileSelection));
  • //Traitement du retour
  • if( resultat_choix == GTK_RESPONSE_OK ){
  • //Récupération du chemin
  • sChemin = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(pFileSelection));
  • //Déclaration des pointeurs FILE
  • FILE *fichier;
  • //Création de l'adresse complète
  • strcpy(adresse,sChemin);
  • strcat(adresse,"/"NOM_FICHIER_SAUVEGARDE);
  • //Libération de la mémoire aloué pour sChemin
  • g_free(sChemin);
  • //Ouverture du fichier en lecture
  • fichier = fopen( adresse , "r" );
  • //Vérification d'aucune erreur
  • if( fichier == false){ erreur(4) ; }
  • //Récupération de la taille du fichier afin de le charger en mémoire
  • while( getc( fichier ) != EOF ){ compteur++ ; }
  • //Rembobinage du fichier
  • rewind(fichier);
  • //Allocation de la mémoire nécessaire
  • memoire = (char*)malloc(compteur + 1);
  • //On charge le fichier en mémoire
  • compteur = 0;
  • while( ( buffer = (char)getc( fichier ) ) != EOF ){
  • *(memoire + compteur ) = buffer;
  • compteur++;
  • }
  • //Fermeture du fichier_lecture
  • fclose( fichier );
  • //Sauvegarde des fichiers avant installation
  • if( 0 != rename(CHEMIN_LOCAL, CHEMIN_LOCAL".bak") ){ erreur(1) ; }
  • if( 0 != rename(CHEMIN_ENVIRONMENT, CHEMIN_ENVIRONMENT".bak") ){ erreur(1) ; }
  • if( 0 != rename(CHEMIN_XORG, CHEMIN_XORG".bak") ){ erreur(1) ; }
  • if( 0 != rename(CHEMIN_SOURCES, CHEMIN_SOURCES".bak") ){ erreur(1) ; }
  • ////////////////////////////////////////////////////////////////////////////////
  • //Restauration du fichier sources.list
  • //Récupération du fichier CHEMIN_SOURCES
  • debut = strstr( memoire, "==============================================================================\n"CHEMIN_SOURCES"\n==============================================================================\n");
  • fin = strstr( memoire, "==============================================================================\nFin\n==============================================================================\n");
  • *fin = '\0';
  • //Vérification rapide (pas optimisé) de l'intégrité des données
  • if( debut == NULL || fin == NULL ){ erreur(2) ; }
  • //Ecriture du fichier CHEMIN_SOURCES
  • compteur = strlen("==============================================================================\n"CHEMIN_SOURCES"\n==============================================================================\n");
  • debut = debut + compteur;
  • fichier = fopen( CHEMIN_SOURCES, "w" );
  • fputs( debut, fichier );
  • fclose(fichier);
  • ////////////////////////////////////////////////////////////////////////////////
  • //Restauration du fichier locale.gen
  • //Récupération du fichier CHEMIN_LOCAL
  • debut = strstr( memoire, "==============================================================================\n"CHEMIN_LOCAL"\n==============================================================================\n");
  • fin = strstr( memoire, "==============================================================================\n"CHEMIN_SOURCES"\n==============================================================================\n");
  • *fin = '\0';
  • //Vérification rapide (pas optimisé) de l'intégrité des données
  • if( debut == NULL || fin == NULL ){ erreur(2) ; }
  • //Ecriture du fichier CHEMIN_LOCAL
  • compteur = strlen("==============================================================================\n"CHEMIN_LOCAL"\n==============================================================================\n");
  • debut = debut + compteur;
  • fichier = fopen( CHEMIN_LOCAL, "w" );
  • fputs( debut, fichier );
  • fclose(fichier);
  • ////////////////////////////////////////////////////////////////////////////////
  • //Restauration du fichier environment
  • //Récupération du fichier CHEMIN_ENVIRONMENT
  • debut = strstr( memoire, "==============================================================================\n"CHEMIN_ENVIRONMENT"\n==============================================================================\n");
  • fin = strstr( memoire, "==============================================================================\n"CHEMIN_LOCAL"\n==============================================================================\n");
  • *fin = '\0';
  • //Vérification rapide (pas optimisé) de l'intégrité des données
  • if( debut == NULL || fin == NULL ){ erreur(2) ; }
  • //Ecriture du fichier CHEMIN_ENVIRONMENT
  • compteur = strlen("==============================================================================\n"CHEMIN_ENVIRONMENT"\n==============================================================================\n");
  • debut = debut + compteur;
  • fichier = fopen( CHEMIN_ENVIRONMENT, "w" );
  • fputs( debut, fichier );
  • fclose(fichier);
  • ////////////////////////////////////////////////////////////////////////////////
  • //Restauration du fichier xorg.conf
  • //Récupération du fichier CHEMIN_XORG
  • debut = strstr( memoire, "==============================================================================\n"CHEMIN_XORG"\n==============================================================================\n");
  • fin = strstr( memoire, "==============================================================================\n"CHEMIN_ENVIRONMENT"\n==============================================================================\n");
  • *fin = '\0';
  • //Vérification rapide (pas optimisé) de l'intégrité des données
  • if( debut == NULL || fin == NULL ){ erreur(2) ; }
  • //Ecriture du fichier CHEMIN_XORG
  • compteur = strlen("==============================================================================\n"CHEMIN_XORG"\n==============================================================================\n");
  • debut = debut + compteur;
  • fichier = fopen( CHEMIN_XORG, "w" );
  • fputs( debut, fichier );
  • fclose(fichier);
  • ////////////////////////////////////////////////////////////////////////////////
  • //Libération de la mémoire
  • free(memoire);
  • //Affichage du message de confirmation
  • pDialog = gtk_message_dialog_new(GTK_WINDOW(pFileSelection),
  • GTK_DIALOG_MODAL,
  • GTK_MESSAGE_INFO,
  • GTK_BUTTONS_OK,
  • TEXTE_10);
  • gtk_dialog_run(GTK_DIALOG(pDialog));
  • gtk_widget_destroy(pDialog);
  • }
  • //Destruction de la fenêtre
  • gtk_widget_destroy(pFileSelection);
  • }
  • ////////////////////////////////////////////////////////////////////////////////
  • //Fonction A propos
  • void a_propos(){
  • //Déclaration des Widget
  • GtkWidget *pDialog;
  • //Affichage puis destruction de la fenêtre
  • pDialog = gtk_message_dialog_new(GTK_WINDOW(NULL),
  • GTK_DIALOG_MODAL,
  • GTK_MESSAGE_INFO,
  • GTK_BUTTONS_OK,
  • TEXTE_2);
  • gtk_dialog_run(GTK_DIALOG(pDialog));
  • gtk_widget_destroy(pDialog);
  • }
  • ////////////////////////////////////////////////////////////////////////////////
  • //Fonction Gestion des erreurs
  • void erreur(int erreur){
  • GtkWidget *pDialog;
  • char message[256];
  • //Chargement du message d'erreur
  • switch(erreur) {
  • case 1: strcpy(message, ERREUR_1); break;
  • case 2: strcpy(message, ERREUR_2); break;
  • case 3: strcpy(message, ERREUR_2); break;
  • default: strcpy(message, ERREUR_4); break;
  • }
  • //Affichage puis destruction de la fenêtre
  • pDialog = gtk_message_dialog_new(GTK_WINDOW(NULL),
  • GTK_DIALOG_MODAL,
  • GTK_MESSAGE_INFO,
  • GTK_BUTTONS_OK,
  • message );
  • gtk_dialog_run(GTK_DIALOG(pDialog));
  • gtk_widget_destroy(pDialog);
  • //On quitte le programme
  • exit(1);
  • }
//Inclusion des librairies
#include <stdio.h>
#include <string.h>
#include <gtk/gtk.h>
#include <stdlib.h>

//Déclaration des constantes des noms des fichiers
#define CHEMIN_XORG "/etc/X11/xorg.conf"
#define CHEMIN_ENVIRONMENT "/etc/environment"
#define CHEMIN_LOCAL "/etc/locale.gen"
#define CHEMIN_SOURCES "/etc/apt/sources.list"

//Déclaration des différents textes présent dans le programme
#define TEXTE_1 TEXTE_7" vous permettra de sauvegarder,\nen un clique, toute la configuration de votre installation\nUbuntu et, ainsi, la restaurer lors d'une prochaine\nréinstallation."
#define TEXTE_2 "Cet utilitaire,developpé en C/Gtk, permet d'exporter la configuration systeme de votre ordinateur afin de la restaurer lorsque vous le réinstallerez.\n\nVoici la listes des fichiers sauvegardés:\n1) "CHEMIN_XORG"\n2) "CHEMIN_ENVIRONMENT"\n3) "CHEMIN_LOCAL"\n4) "CHEMIN_SOURCES"\n\nVersion: 0.0.2\nDate: 06/01/06"
#define TEXTE_3 "Où voulez-vous sauvegarder votre configuration ?"
#define TEXTE_4 "Sauvegarder"
#define TEXTE_5 "Restaurer"
#define TEXTE_6 "À propos"
#define TEXTE_7 "Easy-Sauvegarde"
#define TEXTE_8 "La sauvegarde s'est corretement déroulée"
#define TEXTE_9 "Ouvrez le dossier où se trouve la sauvegarde..."
#define TEXTE_10 "La restauration de votre configuration s'est bien déroulée.\n\nUne copie des fichiés originaux a été faite dans leurs répertoires."

#define NOM_FICHIER_SAUVEGARDE "ConfigSauvegarde"

#define ERREUR_1 "Impossible d'ouvrir le fichier. Vérifiez que vous êtes bien en administrateur."
#define ERREUR_2 "Attention:\nLe fichier de sauvegarde ne peut être réutilisé car il comporte des erreurs. Il a sans doute du être modifié entre temps."
#define ERREUR_3 "Attention:\nUn des fichiers n'a pas été trouvé sur votre ordinateur. La sauvegarde ne peut pas être faite."
#define ERREUR_4 "Attention:\nAucun fichier correspondant n'a été trouvé dans ce répertoire.\n\nLe fichier ce nomme "NOM_FICHIER_SAUVEGARDE"."



//Déclaration des procédures
void sauvegarde();
void restauration();
void a_propos();
void erreur(int erreur);


////////////////////////////////////////////////////////////////////////////////
//Fonction principale
int main(int argc, char **argv)
{
	//Déclaration des Widget
	GtkWidget *pWindow;
	GtkWidget *pVBox;
	GtkWidget *pHBox;
	GtkWidget *pLabel;
	GtkWidget *pButton[2];
	GtkWidget *pFrame;
	
	//Initiation de GTK
	gtk_init(&argc,&argv);
	
	//Création de notre fenêtre principale
	pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
	gtk_window_set_title(GTK_WINDOW(pWindow), TEXTE_7 );
	gtk_window_set_default_size(GTK_WINDOW(pWindow), 385, 160);
	gtk_window_set_position(GTK_WINDOW(pWindow),  GTK_WIN_POS_CENTER);
	g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(gtk_main_quit), NULL);
	gtk_container_set_border_width(GTK_CONTAINER (pWindow), 10);
	
	//Déclaration des labels
	pLabel = gtk_label_new( TEXTE_1 );
	
	//Déclaration des bouttons
	pButton[0] = gtk_button_new_with_label( TEXTE_4 );
	pButton[1] = gtk_button_new_with_label( TEXTE_5 );
	pButton[2] = gtk_button_new_with_label( TEXTE_6 );
	
	//Association des actions aux boutons
	g_signal_connect(G_OBJECT( pButton[0] ), "clicked", sauvegarde, NULL);
	g_signal_connect(G_OBJECT( pButton[1] ), "clicked", restauration, NULL);
	g_signal_connect(G_OBJECT( pButton[2] ), "clicked", a_propos, NULL);
	
	//Construction des conteneurs
	pVBox = gtk_vbox_new(FALSE, 0);
	pHBox = gtk_hbox_new(FALSE, 3);
	
	//Construction des frames
	pFrame = gtk_frame_new("Avant propos:");
	
	//Ajout dans les conteneurs
	gtk_container_add(GTK_CONTAINER(pWindow), pVBox);
	
	gtk_box_pack_start(GTK_BOX(pVBox), pFrame, false, false, 0);
	gtk_container_add(GTK_CONTAINER( pFrame ), pLabel );
	gtk_box_pack_end(GTK_BOX(pVBox), pHBox, false, false, 0);

	gtk_box_pack_start(GTK_BOX(pHBox), pButton[0], false, false, 10);
	gtk_box_pack_start(GTK_BOX(pHBox), pButton[1], false, false, 10);
	gtk_box_pack_end(GTK_BOX(pHBox), pButton[2], false, false, 10); 
	
	//Affichage de notre fenêtre
	gtk_widget_show_all(pWindow);
	
	//Lancement de notre boucle
	gtk_main();
	
	
	return 0;
}


////////////////////////////////////////////////////////////////////////////////
//Fonction de sauvegarde
void sauvegarde(){

	//Déclaration des Widget et des variables
	GtkWidget *pFileSelection;
	GtkWidget *pDialog;
	gchar *sChemin;
	char adresse[512];
	char buffer;
	int resultat_choix;
	

	
	//Création de la fenêtre du choix de l'emplacement pour la sauvegarde
	pFileSelection = gtk_file_chooser_dialog_new( TEXTE_3 ,
	   GTK_WINDOW(NULL),
	   GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
	   GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
	   GTK_STOCK_OPEN, GTK_RESPONSE_OK,
	   NULL);
	
	//Affichage de la fenêtre
	resultat_choix = gtk_dialog_run(GTK_DIALOG(pFileSelection));
	
	//Traitement du retour
	if( resultat_choix == GTK_RESPONSE_OK ){
			
		//Récupération du chemin
		sChemin = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(pFileSelection));
				
		
		//Déclaration des pointeurs FILE
		FILE *fichier_destination;
		FILE *fichier_lecture;
		
		//Création de l'adresse complète
		strcpy(adresse,sChemin);
		strcat(adresse,"/"NOM_FICHIER_SAUVEGARDE);
		
		//Libération de la mémoire aloué pour sChemin
		g_free(sChemin);
		
		//Ouverture du fichier de destination
		fichier_destination = fopen(adresse,"w");
		
		//Ouverture de xorg en simple lecture
		fichier_lecture = fopen(CHEMIN_XORG,"r");
		
		//Vérification d'aucune erreur
		if( fichier_destination == false || fichier_lecture == false){  fclose(fichier_destination);
			                                                            remove(adresse);
			                                                            erreur(3) ; }
		
		//Ecriture premières lignes pour les informations
		if( fputs("Ce fichier a été généré par \""TEXTE_7"\".\n",fichier_destination) == EOF ){ erreur(1) ; }
		if( fputs("Ne surtout pas le modifier. Cela pourrait abimer votre configuration\n\n\n",fichier_destination) == EOF ){ erreur(1) ; }
								   
		if( fputs("==============================================================================\n",fichier_destination) == EOF ){ erreur(1) ; }
		if( fputs(CHEMIN_XORG,fichier_destination) == EOF ){ erreur(1) ; }
		if( fputs("\n==============================================================================\n",fichier_destination) == EOF ){ erreur(1) ; }
								   
		//Copie du fichier xorg
		while( ( buffer = (char)getc(fichier_lecture) ) != EOF ){ if( putc(buffer,fichier_destination) == EOF ){ erreur(1) ; } }
		
		//Changement du fichier en lecture
		fclose(fichier_lecture);
		fichier_lecture = fopen( CHEMIN_ENVIRONMENT ,"r");
		
		//Vérification d'aucune erreur
		if( fichier_lecture == false){ fclose(fichier_destination);
			                           remove(adresse);
			                           erreur(3) ; }
		
		//Indication de changement de fichier
		if( fputs("==============================================================================\n",fichier_destination) == EOF ){ erreur(1) ; }
		if( fputs( CHEMIN_ENVIRONMENT ,fichier_destination) == EOF ){ erreur(1) ; }
		if( fputs("\n==============================================================================\n",fichier_destination) == EOF ){ erreur(1) ; }
		
		//Copie du fichier ENVIRONMENT
		while( ( buffer = (char)getc(fichier_lecture) ) != EOF ){ if( putc(buffer,fichier_destination) == EOF ){ erreur(1) ; } }
		
		//Changement du fichier en lecture
		fclose(fichier_lecture);
		fichier_lecture = fopen( CHEMIN_LOCAL ,"r");
		
		//Vérification d'aucune erreur
		if( fichier_lecture == false){ fclose(fichier_destination);
			                           remove(adresse);
			                           erreur(3) ; }
									   
									   
		//Indication de changement de fichier
        if( fputs("==============================================================================\n",fichier_destination) == EOF ){ erreur(1) ; }
        if( fputs( CHEMIN_LOCAL ,fichier_destination) == EOF ){ erreur(1) ; }
        if( fputs("\n==============================================================================\n",fichier_destination) == EOF ){ erreur(1) ; }
        
		
		//Copie du fichier ENVIRONMENT
		while( ( buffer = (char)getc(fichier_lecture) ) != EOF ){ if( putc(buffer,fichier_destination) == EOF ){ erreur(1) ; } }
				
		//Changement du fichier en lecture
		fclose(fichier_lecture);
		fichier_lecture = fopen( CHEMIN_SOURCES ,"r");
		
		//Vérification d'aucune erreur
		if( fichier_lecture == false){ fclose(fichier_destination);
			                           remove(adresse);
			                           erreur(3) ; }
		
		//Indication de changement de fichier
		if( fputs("==============================================================================\n",fichier_destination) == EOF ){ erreur(1) ; }
		if( fputs( CHEMIN_SOURCES ,fichier_destination) == EOF ){ erreur(1) ; }
		if( fputs("\n==============================================================================\n",fichier_destination) == EOF ){ erreur(1) ; }
		
		//Copie du fichier SOURCES
		while( ( buffer = (char)getc(fichier_lecture) ) != EOF ){ if( putc(buffer,fichier_destination) == EOF ){ erreur(1) ; } }
				
		//Indication de la fin de la sauvegarde
		if( fputs("==============================================================================\n",fichier_destination) == EOF ){ erreur(1) ; }
		if( fputs("Fin\n",fichier_destination) == EOF ){ erreur(1) ; }
		if( fputs("==============================================================================\n",fichier_destination) == EOF ){ erreur(1) ; }
		
		
		//Suppresion des pointeurs FILE
		fclose(fichier_destination);
		fclose(fichier_lecture);
		
		//Affichage du message de confirmation
		pDialog = gtk_message_dialog_new(GTK_WINDOW(pFileSelection),
                  GTK_DIALOG_MODAL,
                  GTK_MESSAGE_INFO,
                  GTK_BUTTONS_OK,
                  TEXTE_8 );
		gtk_dialog_run(GTK_DIALOG(pDialog));
		gtk_widget_destroy(pDialog);
		
		}
	
	//Destruction de la fenêtre
	gtk_widget_destroy(pFileSelection);	
	
	return;
}

////////////////////////////////////////////////////////////////////////////////
//Fonction A propos
void restauration(){
	
	//Déclaration des Widget et des variables
	GtkWidget *pFileSelection;
	GtkWidget *pDialog;
	gchar *sChemin;
	char adresse[512];
	char buffer;
	int resultat_choix;
	int compteur = 0;
	char *memoire;
	char *debut;
	char *fin;

	
	//Création de la fenêtre du choix de l'emplacement pour la sauvegarde
	pFileSelection = gtk_file_chooser_dialog_new( TEXTE_9 ,
	   GTK_WINDOW(NULL),
	   GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
	   GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
	   GTK_STOCK_OPEN, GTK_RESPONSE_OK,
	   NULL);
	
	//Affichage de la fenêtre
	resultat_choix = gtk_dialog_run(GTK_DIALOG(pFileSelection));
	
	//Traitement du retour
	if( resultat_choix == GTK_RESPONSE_OK ){
			
		//Récupération du chemin
		sChemin = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(pFileSelection));
		
		
		//Déclaration des pointeurs FILE
		FILE *fichier;
		
		//Création de l'adresse complète
		strcpy(adresse,sChemin);
		strcat(adresse,"/"NOM_FICHIER_SAUVEGARDE);
		
		//Libération de la mémoire aloué pour sChemin
		g_free(sChemin);
		
		//Ouverture du fichier en lecture
		fichier = fopen( adresse , "r" );
		
		//Vérification d'aucune erreur
		if( fichier == false){ erreur(4) ; }
		
		//Récupération de la taille du fichier afin de le charger en mémoire
		while( getc( fichier ) !=  EOF ){ compteur++ ; }
		
		//Rembobinage du fichier
		rewind(fichier);
		
		//Allocation de la mémoire nécessaire
		memoire = (char*)malloc(compteur + 1);
		
		//On charge le fichier en mémoire
		compteur = 0;
		while( ( buffer = (char)getc( fichier ) ) !=  EOF ){
			
			                    *(memoire + compteur ) = buffer;
			                    compteur++;
			
		}
		
		
		//Fermeture du fichier_lecture
		fclose( fichier );
		
		//Sauvegarde des fichiers avant installation
		if( 0 != rename(CHEMIN_LOCAL, CHEMIN_LOCAL".bak") ){ erreur(1) ; }
		if( 0 != rename(CHEMIN_ENVIRONMENT, CHEMIN_ENVIRONMENT".bak") ){ erreur(1) ; }
		if( 0 != rename(CHEMIN_XORG, CHEMIN_XORG".bak") ){ erreur(1) ; }
		if( 0 != rename(CHEMIN_SOURCES, CHEMIN_SOURCES".bak") ){ erreur(1) ; }


////////////////////////////////////////////////////////////////////////////////
//Restauration du fichier sources.list

        //Récupération du fichier CHEMIN_SOURCES
		debut = strstr( memoire, "==============================================================================\n"CHEMIN_SOURCES"\n==============================================================================\n");
		fin = strstr( memoire, "==============================================================================\nFin\n==============================================================================\n");
		*fin = '\0';
		
		//Vérification rapide (pas optimisé) de l'intégrité des données
		if( debut == NULL || fin == NULL ){ erreur(2) ; }
		
		//Ecriture du fichier CHEMIN_SOURCES
		compteur = strlen("==============================================================================\n"CHEMIN_SOURCES"\n==============================================================================\n");
		debut = debut + compteur;
		fichier = fopen( CHEMIN_SOURCES, "w" );
		fputs( debut, fichier );
		fclose(fichier);		
		
////////////////////////////////////////////////////////////////////////////////
//Restauration du fichier locale.gen

        //Récupération du fichier CHEMIN_LOCAL
		debut = strstr( memoire, "==============================================================================\n"CHEMIN_LOCAL"\n==============================================================================\n");
		fin = strstr( memoire, "==============================================================================\n"CHEMIN_SOURCES"\n==============================================================================\n");
		*fin = '\0';
		
		//Vérification rapide (pas optimisé) de l'intégrité des données
		if( debut == NULL || fin == NULL ){ erreur(2) ; }
		
		//Ecriture du fichier CHEMIN_LOCAL
		compteur = strlen("==============================================================================\n"CHEMIN_LOCAL"\n==============================================================================\n");
		debut = debut + compteur;
		fichier = fopen( CHEMIN_LOCAL, "w" );
		fputs( debut, fichier );
		fclose(fichier);
		
////////////////////////////////////////////////////////////////////////////////
//Restauration du fichier environment

        //Récupération du fichier CHEMIN_ENVIRONMENT
		debut = strstr( memoire, "==============================================================================\n"CHEMIN_ENVIRONMENT"\n==============================================================================\n");
		fin = strstr( memoire, "==============================================================================\n"CHEMIN_LOCAL"\n==============================================================================\n");
		*fin = '\0';
		
		//Vérification rapide (pas optimisé) de l'intégrité des données
		if( debut == NULL || fin == NULL ){ erreur(2) ; }
		
		//Ecriture du fichier CHEMIN_ENVIRONMENT
		compteur = strlen("==============================================================================\n"CHEMIN_ENVIRONMENT"\n==============================================================================\n");
		debut = debut + compteur;
		fichier = fopen( CHEMIN_ENVIRONMENT, "w" );
		fputs( debut, fichier );
		fclose(fichier);

////////////////////////////////////////////////////////////////////////////////
//Restauration du fichier xorg.conf

        //Récupération du fichier CHEMIN_XORG
		debut = strstr( memoire, "==============================================================================\n"CHEMIN_XORG"\n==============================================================================\n");
		fin = strstr( memoire, "==============================================================================\n"CHEMIN_ENVIRONMENT"\n==============================================================================\n");
		*fin = '\0';
		
		//Vérification rapide (pas optimisé) de l'intégrité des données
		if( debut == NULL || fin == NULL ){ erreur(2) ; }
		
		//Ecriture du fichier CHEMIN_XORG
		compteur = strlen("==============================================================================\n"CHEMIN_XORG"\n==============================================================================\n");
		debut = debut + compteur;
		fichier = fopen( CHEMIN_XORG, "w" );
		fputs( debut, fichier );
		fclose(fichier);

////////////////////////////////////////////////////////////////////////////////
		
		//Libération de la mémoire
		free(memoire);
		
		//Affichage du message de confirmation
		pDialog = gtk_message_dialog_new(GTK_WINDOW(pFileSelection),
                  GTK_DIALOG_MODAL,
                  GTK_MESSAGE_INFO,
                  GTK_BUTTONS_OK,
                  TEXTE_10);
		gtk_dialog_run(GTK_DIALOG(pDialog));
		gtk_widget_destroy(pDialog);
		
		
		}
		
		//Destruction de la fenêtre
		gtk_widget_destroy(pFileSelection);
		
	
}

////////////////////////////////////////////////////////////////////////////////
//Fonction A propos
void a_propos(){

	//Déclaration des Widget
	GtkWidget *pDialog;	
	
	//Affichage puis destruction de la fenêtre
	pDialog = gtk_message_dialog_new(GTK_WINDOW(NULL),
                  GTK_DIALOG_MODAL,
                  GTK_MESSAGE_INFO,
                  GTK_BUTTONS_OK,
                  TEXTE_2);
	gtk_dialog_run(GTK_DIALOG(pDialog));
	gtk_widget_destroy(pDialog);
    	
}
////////////////////////////////////////////////////////////////////////////////
//Fonction Gestion des erreurs
void erreur(int erreur){
	
	GtkWidget *pDialog;
	char message[256];
	
	//Chargement du message d'erreur
    switch(erreur) {
        case 1: strcpy(message, ERREUR_1); break;
        case 2: strcpy(message, ERREUR_2); break;
        case 3: strcpy(message, ERREUR_2); break;
		default: strcpy(message, ERREUR_4); break;
   }
	
	//Affichage puis destruction de la fenêtre
	pDialog = gtk_message_dialog_new(GTK_WINDOW(NULL),
                  GTK_DIALOG_MODAL,
                  GTK_MESSAGE_INFO,
                  GTK_BUTTONS_OK,
                  message );
	gtk_dialog_run(GTK_DIALOG(pDialog));
	gtk_widget_destroy(pDialog);
	
	//On quitte le programme
	exit(1);
}

 Conclusion

J'aimerai, par la suite; compresser le fichier généré puis vérifier son intégrité avec un md5 pas exemple...

Merci pour vos conseils...


 Historique

06 janvier 2006 20:36:24 :
Ajout du fichier à sauvegarder =>/etc/apt/sources.list Utilisation de la librairie stdlib.h plutot que alloc.h Passage à la version 0.0.2
08 janvier 2006 11:59:22 :
Modification de la procédure erreur(), remplacement des "if" par un switch !

 Sources de la même categorie

Source avec Zip TRAITEMENT D'IMAGE PGM par Jios
Source avec une capture COLORIMÈTRE NUMÉRIQUE LINUX par valchek
Source avec Zip TRAITEMENTS D'IMAGES AU FORMAT PGM AVEC LES ALGORITHMES DE C... par lemout
Source avec Zip ALGORITHME ACO INTERFACE GTK par RyBeN
Source avec Zip COMPRESSER SES SAUVEGARDES SMSBACKUPRESTORE (ANDROID) EN C A... par ThalLab

 Sources en rapport avec celle ci

Source avec Zip [MYLIB] GESTION DE FICHIERS par Galaad2908
Source avec une capture TRANSFERT DE FICHIER TCP [GCC - GTK] par ganjarasta
Source avec Zip DICTIONNER RECHERCHE GTK par jabirmed
Source avec Zip Source avec une capture UPLOADER DE FICHIER EN GTK+ 2.0 SOUS LINUX par bigbourin
Source avec une capture MANIPULATION D'UN FICHIER (LECTURE, ECRITURE) par merryl

Commentaires et avis

Commentaire de deck_bsd le 06/01/2006 15:14:50

salut :)

# //Déclaration des fonctions
# void sauvegarde();
# void restauration();
# void a_propos();
# void erreur(int erreur);

Ce ne sont pas des fonctions mais des procédures ;) .Car elles ne renvoient aucune valeur . Sinon je étonné par la propreté du code.
On dirait que la biblio gtk est plus simple que le win32 c'est bon à savoir lol.

Bonne continuation.

++ALL

Commentaire de cyber_securite le 06/01/2006 18:17:17

Que faut il que je modifie alors dans mon code ? Quel est la différence entre procédure et fonction ???

Oui, au début j'utilisais win32 et comme je suis passé sous Linux, maintenant j'utilise GTK ! J'ai moi même été étonné par le passage sans difficulté que j'ai eu.

Vraiment GTK est génial comme bibliotèque: simple, exportable et surtout le rendu est joli !!!

Dommage que les programmeurs ne s'y interressent pas plus... Sinon, je dois seulement changer mon commentaire pour ce problème ????

Merci de ton aide...

Commentaire de deck_bsd le 06/01/2006 19:38:14

re :D

Et bien la différence entre procdédure et fonction est très simple. Une fonction renvoie TOUJOURS un valeur
et doit en C toujours avoir un return et le 1er paramètre de ca signature est le type de valeur qu'elle renvoie.
ex:

int nbr(){
   return 54;
}

une procédure ne renvoie JAMAIS rien . Le premier paramètre de ça signature est en c "void"
ex :
void nbr(){
   ;
}.
Donc oui il te suffit juste de changer ton commentaire.

Pour ta fonction main le int est inutile , faisant une procédure plutot, car de toute façons elle ne renvoie rien
(return 0;).

Sinon pour le reste c'est ok ;).

Commentaire de Joky le 06/01/2006 19:54:59

return 0; renvoi quelque chose désolé

Commentaire de cyber_securite le 06/01/2006 20:30:47

Merci beaucoup !!!

Je modifie le commentaire.

Pour le return je ne suis pas d'accord ! Le systeme attend une réponse de la part du programme il me semble. Sur Linux, 0 indique que le programme c'est terminé correctement !!! Enfin je cois. Comme je l'ai dis, je programme pour mon propre plaisir.

Mais les critiques sont vraiment le bienvenu. Etant donné que j'apprends par moi même, comment corriger mes erreurs sinon ???

Bye...

Commentaire de deck_bsd le 07/01/2006 13:30:52

joky : oui return 0 renvoie 0 mais c'est inutile.

Commentaire de cyber_securite le 07/01/2006 14:02:26

Non, je ne crois pas ! Cela indique au systeme (Linux dans mon cas) que le programme se termine sans difficulté ! Changé la valeur de retour indique à Linux qu'il y a eu un problème.

Commentaire de deck_bsd le 07/01/2006 14:40:11

C'est possible, si ces le cas, je m'excuse . pour ma part , lorsque je veut quitter le programme sans signaler d'erreur j'utilise exit(0)
et exit(1) pour en signaler une.

Commentaire de shaiton le 07/01/2006 18:11:38

salut,
sympa,
ca me donne envie de coder sous linux !
mais bon moi aussi j'aprend par moi meme (enfin, j'ai des cours d'info,
mais on est n'ai pas sencé connaitre plus loin que printf() !! on doit utiliser une librerie specialement concu pour nous :p
trop nul.. mais bon)

sinon j'ai lu pareil: renvoyer 0 = pas de probleme et 1 signifi qu'il y a une erreur, mais bon,
c'est juste une histoire de francais  ;)
en tout cas je savais pas la difference entre une fonction et une procedure... merci :p


je sent que je vais memettre ta source de coter pour aprendre une peu a gere les fenetre :p
et tout ces comentaires, c'est nikel pour lire ta source!

Commentaire de cyber_securite le 07/01/2006 20:59:30

Oui ! J'aurais voulu avoir des critiques sur ma façon de gérer les erreurs par exemple. Mais pas de réactions !!!
Sinon, j'ai essayé de mettre le plus possible de commentaires ! La librairie GTK est formidable ! Plus propre que la win32 !!!
Et, elle est exportable sous Linux, Windows et MacOS !!! Que demander de plus ???? Autant dire que j'ai laissé tombé <windows.h> ;) !!!

Commentaire de BruNews le 07/01/2006 22:10:05 administrateur CS

Pour laisser tomber il aurait d'abord fallu que tu connaisses, fin septembre tu tentes de compiler un code MFC sur devcpp et maintenant tu nous donnes un avis sur le code Windows...
Continue à apprendre et épargne nous les éternels trolls à 2 balles.

Commentaire de cyber_securite le 08/01/2006 02:06:00

J'ai pas tellement envie de répondre à ça ! Juste qu'apprendre par soit même n'est pas toujours simple surtout lorsque l'on se sent encouragé comme cela !
Ensuite, depuis fin septembre, cela fait presque 4 mois, à programmer peut être pas de façon intensif mais tout de même de façon assé importante, on fini par s'améliorer peut être un peu. Ce que je voulais dire par mon message précédent, c'est que voici, encore, une belle démonstration du libre !

Maintenant, peut être que l'aimable Monsieur BruNews (cf: beaucoup de postes de sa part) pourrait nous donner son avis la dessu ???
Cela pourrait sans doute être interressent !

Ou même, pourrait-il jeter un petit cout d'oeil sur ma source afin de dire ce qui ne va pas (beaucoup de choses surement) ! Ca me permettrait de progresser et de mettre un petit exemple de l'utilisation de cette librairie à disposition!

C'est vrai que depuis fin septembre, je n'étais pas venu sur ce site ayant préféré un autre site (http://c.developpez.com/) largement plus aimable et plus agréable !

Maintenant merci pour le "Continue à apprendre et épargne nous les éternels trolls à 2 balles.", je pense en effet continuer à essayer de progresser mais surement pas ici !

Ce genre de commentaire fait vraiment fuire !

Ciao...

("merci de rester calme et courtois tout au long de vos échanges" Obligé d'appouver mais à contre coeur)

ps: à ce demander qui troll réellement.

Commentaire de deck_bsd le 08/01/2006 10:59:18

Ok les gars lol on reste cool hein. chacun ses préfèrences et puis voila :D Zen, Relax ;)

Cyber, j'ai une question. surement débile mais bon. Avec la librairie gtk il y a l'utilisation des ressources obligatoires?
Car en win32 pas moyen de créer une boite de dialogue sans les ressources (du moin je ne la connait pas) et comme
chez moi dev-cpp bug avec l'utilisation de celles-ci (jamais moyen de compiler monprojet.rc).

Alors voila je me demandai, cela peut être intéressent. Tu à déjà esseyé de l'exporter sous win?

Commentaire de deck_bsd le 08/01/2006 11:13:04

Et aussi,

"Oui ! J'aurais voulu avoir des critiques sur ma façon de gérer les erreurs par exemple. Mais pas de réactions"

Si il n'y à pas de réaction c'est que il y en a pas besoin. Perso je trouve la gestion d'erreur bonne.
Sauve ceci que je ne comprend pas trop :

if( fputs("Ce fichier a été généré par \""TEXTE_7"\".\n",fichier_destination) == EOF ){ erreur(1) ; }

Pourquoi tu teste chaque fois EOF??? Si tu ajoute dans le fichier tu ne tomberas jamais sur EOF.
C'est à la lecture que le EOF est souvent (tout le temps) utilisé, mais pas à l'écriture. Même si tu veut écrire à la
fin du fichier pas besoin de tester EOF, tu fais avec fseek();. C'est pour ça que je comprend pas ces lignes.

Commentaire de BruNews le 08/01/2006 11:18:46 administrateur CS

Quand on provoque on ne doit pas s'étonner des réactions...

Passons à plus constructif:

Ne teste pas tous les cas du 'if' si tu as déjà celui qui t'intéresse, le 'switch case' évitera cela:

void erreur(int erreur)
{
  ....
  switch(erreur) {
    case 1: strcpy(message, ERREUR_1); break;
    case 2: strcpy(message, ERREUR_2); break;
    ...
    default: strcpy(message, ERREUR_4); break;
  }
  ...
}

Commentaire de BruNews le 08/01/2006 11:23:46 administrateur CS

DECK_BSD > Jette un oeil sur les sources devcpp qui emploient des dialog en rc, je ne sais plus lesquelles mais j'en ai déjà vues.
vecchio56 a d'ailleurs fait un excellent éditeur de dialog justement pour les IDEs tels devcpp qui n'en fournissent pas.

Commentaire de cyber_securite le 08/01/2006 12:17:49

DECK_BSD > Je n'ai utilisé aucune ressource pour la création de l'interface ! Il existe un utilitaire sous Linux "Glane" que l'on pourrait appeler un éditeur de ressources ! Il génère un fichier xml ! Mais je ne l'ai pas utilisé dans mon cas là !

Pour le EOF, dans un des cours téléchargés puis imprimés que j'ai trouvé sur Internet (très bien fait d'ailleur), ils indiquent que la fonction fputs retourne EOF si elle ne peut pas écrire dans le fichier. J'ai aussi été étonné du fait que EOF indique la fin du fichier en cas de lecture ! Mais dans mon cas il ne sert qu'à vérifier qu'il a bien pu écrire sans souci !

Pour pouvoir utiliser GTK, il faut avoir le toolkit d'installer (les dll)! Tu peux aller là => http://www.gtk.org/
Sauf pour DevCpp, il faut installer son pactage gtk ! Dans mise à jour d'après mes souvenirs.

Si tu veux essayer un logiciel utilisant GTK, tu peux télécharger le logiciel de dessin Gimp !!! C'est un logiciel libre utilisant Gtk ! Enfin, Gtk à été développé pour Gimp ! Et le fait d'installer Gimp, il installera, par la même occasion, les dlls !

C'est le petit hic de Gtk !

BruNews > J'ai modifié ! C'est vrai que je ne pense pas utiliser switch en c alors que je l'utilise toujours en php, merci !
          "Quand on provoque on ne doit pas s'étonner des réactions...", j'avais nullement l'intension de provoquer, juste donner mon avi et ma motivation !

Commentaire de BruNews le 08/01/2006 12:42:30 administrateur CS

DECK_BSD >
gagah1 vient justement de mettre une source devcpp avec ressources en rc:
http://www.cppfrance.com/code.aspx?ID=35466

Commentaire de deck_bsd le 08/01/2006 12:51:17

BruNews > le problème ne vient pas de mon utilisation de celle-ci, mais de mon pc. Car si je compile
un projet utilisant les ressources sur un autre pc, tout compile sans problème. Alors que avec le
même code et les même fichier sur mon pc cela ne vas pas.

Commentaire de deck_bsd le 08/01/2006 12:53:41

Cyber_securite > j'ai été voir sur gtk.org. J'ai trouvé les packages, mais heu ils y en à beaucoup
il faut tous les téléchargers?????? Vas pour les zip, mais les .zip.md5 heu c'est quoi??? jamais vu
cette extension, je les décompresses avec quoi?

Commentaire de cyber_securite le 08/01/2006 13:52:10

md5 permet de vérifier l'intégrité d'un fichier !!!! On l'utilise énormément dans la programmation web (vérification de mot de passe).
Je veux justement l'ajouter à ce programme afin de vérifier l'intégrité de la savegarde avant de modifier les fichiers systemes.

Tu n'es pas obligé de tant servir ! Il y a beaucoup de fichiers car y a les bibliotèques de developpement et les dlls. Pour le developpement installe le paquet de DevCpp puis télécharge le zip des dlls pour windows.

Ce n'est pas plus compliqué que cela !

Commentaire de deck_bsd le 08/01/2006 14:47:53

Cyber_securite > je sais je suis casse pied mais bon :)
je doit télécharger quel pack? http://devpaks.org/category.php?category=GTK

le zip des dlls pour windows je le trouve où?

Commentaire de cyber_securite le 08/01/2006 16:03:47

Non, non tu n'es pas casse pied du tout !!!

Je crois avoir retrouvé le lien. Mais étant sous Linux je ne peux pas vérifier.

http://prdownloads.sourceforge.net/gtk-win/GTK-Runtime-Environment-2.2.1.2.exe?download

Mais je pense que c'est ça...

Etant du libre, pour le télécharger tu choisis le serveur le plus proche de chez toi. Enfin je pense que tu connais.
Tiens moi au courrant...

Commentaire de deck_bsd le 08/01/2006 16:12:47

Oki je l'ai pris et installer, mais pour
http://prdownloads.sourceforge.net/gtk-win/GTK-Runtime-Environment-2.2.1.2.exe?download
je doit les prendres tous?

Commentaire de cyber_securite le 08/01/2006 17:53:14

Non, tu choisis un seveur, par exemple Paris, et tu télécharge l'exe.

Normalement, il n'y a que lui à installer pour pouvoir faire fonctionner gtk !!!

Oublis les autres paquets...

L'exe est un setup qui installe les dlls comme un grand !!! Il suffit. Tu choisis UN serveur et tu le télécharge puis tu l'executes.

Commentaire de deck_bsd le 08/01/2006 19:42:13

LOL mais les dll je les ai, je te parle du patch dev-cpp

Commentaire de cyber_securite le 08/01/2006 19:57:08

Ah !!! Oups, désolé...

Bin, si je me souviens bien, il faut que tu utilises le module de DevCpp qui permet de mettre à jours. Puis tu cherches Gtk !!! Enfin c'est dans DevC++...

Commentaire de deck_bsd le 09/01/2006 14:13:55

Voila j'ai tous installer, tu n'a pas un exemple simple (création de la fenêtre principale avec un message hello world)
par exemple ç a serait bien sympa :p

Commentaire de cyber_securite le 09/01/2006 18:14:20

Je te conseil ça => http://www.gtk-fr.org/wakka.php?wiki=PageAccueil.
Va dans 'Les fenêtres', il y a un exemple...

Commentaire de deck_bsd le 10/01/2006 14:34:22

l'ennuie c'est que j'ai donc bien installer gtk pour dev-cpp, mais lorsque je fait un include <gtk\gtk.>
Cela ne vas pas car c'est pas le bon dossier. Enfin bon je me susi arragé pour que le chemin soit bien gtk\gtk.h.

Seulement je ne sais pas ce qui ce passe, pour un minuscule projet (qui utilise mm pas encore gtk) ça mes un temps fou a compilé.
sans jamais arrivé a la fin.

Qu'est ce qui ne vas pas?

Commentaire de deck_bsd le 10/01/2006 14:41:45

En faite si, la compilation se termine, mais j'ai au bas moi une centaine d'erreur dans chaque .h de gtk :s

Commentaire de deck_bsd le 10/01/2006 14:49:13

Haaaaaaaaaaaa oki. Merci pour l'adresse du tuto, en faite je savai pas qu'il falait faire un nouveau projet GTK+. Bon
heu c'est ma période d'exam (j'ai math demain arg) je verai ça après. Si besoin est tu seras tjrs quelque part sur le forum? lol

Commentaire de theboogymaster le 15/12/2009 10:34:18

Ton programme est vulnérable au Buffer Overflow.. Regarde (strcpy(adresse,sChemin); ) utilise plus tot strncpy pour contrôler la taille de l'input. Si tu utilise le programme en root, on peut executer du code si on exploite cette fonction.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Ourir Fichier Windows/Linux [ par jockos ] Bonjour,Je voudrais connaitre la meilleur méthode pour ouvrir des fichiers en C++ afin d'être compatible Windows/Linux.Jusque là, j'utilisais les API Installer GTK sous linux [ par neodelphi ] Bonjour tout le monde ! Je me suis mis recement &#224; code sous linux. Je'utiliser donc g++ a pr&#233;sent au lieu de visual studio. Je voulais appre sauvegarde fichier GTK+ [ par mackaB ] j arrive pas a coder en gtk + la sauvegarde d'un fichier.. ça doit pas etre très dur je sais mais j'y arrive pas.. j'arrive à ouvrir un fichier par-co Recompilation uniquement d'un seul fichier [ par svince ] Bonjour, J'ai un petit souci en C++. J'ai un projet codé en C++ composé des fichiers source (.c), mais aussi des fichiers .o et le MakeFile. Le probl Lecture de fichiers verrouillés [ par norton ] Bonjour / Bonsoir à tous. Pouvez-vous me dire si il est possible sous Windows de lire un fichier en "temps réel" verrouillé par le système ? Je m'e les headers ou les fichier .h [ par le1scorpion1noir ] salut a tous une petite question apropos des headers ou les fichiers .h est ce que je dois les inclure dans les fichiers .c ou le fichier main.c ??? gtk/C [ par pirouette35 ] Bonjour, Je suis débutante en langage C et encore plus en GTK. Pour un projet, nous devons réalisé un logiciel qui permet la saisie de données concer Reduire la taille de l'image par 2 [ par mano972 ] Bonjour c'est assez urgent, je bloque pour un fonction qui est de réduire la taille de l'image par 2. Je vous montre ceux que j'ai déjà fais. [code=cp renommer fichiers par lot avec données contenues dans un fichier dbf [ par hanssn ] j'ai des fichiers au format mp3 avec comme nom pour chaque fichier un code ! j'ai aussi un fichier dbf contenant les descriptions pour chaque fichier Listage des fichiers d'une directory [ par ArthurAuguste ] Bonjour, Question probablement très simple pour qui l'a déjà fait. J'essaie de savoir quels sont tous les fichiers qui se trouvent sous une directory


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,624 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales