Programmation en c

Sur cette page, figure des exemples et des explications concernant le langage c.


1. Code sources et explications de configuration de easybackup.

J'écris ces premières lignes pour vous montrez comment configurer le fichier 'config.yml' généré par easybackup et ensuite, je mettrai à disposition les sources en m'efforcant de les commenter un minimum :-s.
Lors de sa création le fichier 'config.yml' comportera deja deux sauts à la ligne et il est impératif de ne pas y toucher.
Pour naviguer de ligne en ligne, utilisez les flèches de votre clavier pour être sûr de ne pas en rajouter ou en enlever.
Sur la premiere ligne, vous devez entrer le nom du dossier à sauvegarder.
Il y a deux cas de figure:
- Soit vous mettez easybackup au même endroit que le dossier et vous mettez simplement son nom. Exemple: dossier_a_sauvergarder.
- Soit il n'est pas au même endroit et vous devez mettre son chemin d'accès.Exemple: C:\Users\Think\Desktop\dossier_a_sauvergarder.

Sur la deuxieme ligne, vous devez entrer le nom du dossier où la sauvegarde sera faite. Exemple: dossier_de_sauvegarde.
La date et l'heure seront automatiquement rajoutées, ce qui donnera : dossier_de_sauvegarde_2013-10-06_10-15-54.

Sur la dernière ligne vous avez le choix de mettre ou non le chemin d'accès du dossier_de_sauvegarde. Laissez vide si vous n'en voulez pas, dans ce cas, le dossier de sauvegarde se trouvera au même endroit que easybackup.

Info: Vous pouvez copier uniquement des dossiers, mais pas directement un fichier. Les dossiers et sous dossiers seront aussi copiés, même si ceux-ci sont vides.
Info: Si une erreur a été faite durant la configuration, un message sera affiché dans le programme.

2. Code source écrit entièrement par moi même:

						#include <stdio.h>
						#include <stdlib.h>
						#include <windows.h>
						#include <time.h>
						void Color(int couleurDuTexte,int couleurDeFond) // fonction d'affichage de couleurs
						{
								HANDLE H=GetStdHandle(STD_OUTPUT_HANDLE);
								SetConsoleTextAttribute(H,couleurDeFond*16+couleurDuTexte);
						}
						int main(int argc, char*argv[])
						{
							/*Variables*/
							time_t timestamp = time(NULL);
							int caracterfin=0,nbcaracterlu[3]={0},erreur=0;
							char buffer[256]="", dossier[30]="", backup[30]="",buffer2[256]="",date[256]="",chemin[256]="";
							FILE*config = NULL;
							Color(10,0);
							printf("                              Bienvenue dans EasyBackup\n");
							Color(15,0);
							printf("                   *************************************************\n\
										   * Ce programme a ete ecrit en c par : Th3maz1ng *             \
										  * Vous trouverez dans le dossier parent, un fi- *              \
										 * chier de configuration 'config.yml' ou vous   *               \
										* pourrez choisir le nom du dossier a sauvegar- *                \
									   * der et le nom du dossier de sauvegarde.       *                 \
									  * Syntaxe: 1er ligne:Dossier_a_sauvegarder      *                  \
									 *          2eme ligne:Dossier_de_sauvegarde     *                   \
									*          3eme ligne:chemin d acces (optionel) *                    \
								   *************************************************");
							/*Creation d'un fichier de config*/
							config = fopen("config.yml","r");
							printf("\n\nStatu du chargement du fichier config.yml:\n");
							if(config!=NULL)
							{
								printf("Fichier de configuration charge\n");
								while(caracterfin!='\n')
								{
									caracterfin=fgetc(config);
									nbcaracterlu[0]++;
									if(nbcaracterlu[0]>200)
									{
										Color(12,0);
										printf("Probleme dans le fichier de configuration. Effacer le !!!\n");
										erreur=1;
										Color(15,0);

										Sleep(6000);
										return 0;
									}
								}
								rewind(config);
								fgets(dossier,nbcaracterlu[0],config);
								printf("-Caracteres lus :%d\n",nbcaracterlu[0]-1);
								printf("-Nom du dossier a sauvegarder: %s\n",dossier);
								if(nbcaracterlu[0]-1==0)
								{
									Color(12,0);
									erreur=1;
									printf("Veuillez edite le fichier 'config.yml' qui se trouve dans le dossier parent\n\n");
									Color(15,0);

								}
								else
								{
									printf("\n");
								}
								caracterfin=0;
								fgetc(config);
								while(caracterfin!='\n')
								{
									caracterfin=fgetc(config);
									nbcaracterlu[1]++;
									if(nbcaracterlu[1]>200)
									{
										Color(12,0);
										printf("Probleme dans le fichier de configuration. Effacer le !!!\n");
										erreur=1;
										Color(15,0);

										Sleep(6000);
										return 0;
									}
								}
								printf("-Caracteres lus :%d\n",nbcaracterlu[1]-1);
								caracterfin=0;
								fgetc(config);
								while(caracterfin!=EOF)
								{
									caracterfin=fgetc(config);
									nbcaracterlu[2]++;
									if(caracterfin=='\n')
									{
										Color(12,0);
										erreur=1;
										printf("Saut a la ligne interdit dans 'config.yml'.Edite le.\n\n");
										Color(15,0);
									}
								}
								rewind(config);
								while(nbcaracterlu[0]>0)
								{
									fgetc(config);
									nbcaracterlu[0]--;
								}
								fgets(backup,nbcaracterlu[1],config);
								printf("-Nom du dossier de sauvegarde: %s\n",backup);
								if(nbcaracterlu[1]-1==0)
								{
									Color(12,0);
									erreur=1;
									printf("Veuillez edite le fichier 'config.yml' qui se trouve dans le dossier parent\n\n");
									Color(15,0);
								}
								else
								{
									printf("\n");
								}
								fgetc(config);
								fgets(chemin,nbcaracterlu[2]+1,config);
								printf("-Caracteres lus :%d\n",nbcaracterlu[2]-1);
								if(nbcaracterlu[2]-1==0)
								{
									printf("-Chemin du dossier de sauvergarde: Pas de chemin specifie\n\n");
								}
								else
								{
									printf("-Chemin du dossier de sauvergarde: %s\n",chemin);
								}

							}
							else
							{
								printf("Le fichier de configuration vient d'etre cree\nVous n'avez plus qu'a le configurer\n");
								erreur=1;
								config = fopen("config.yml","w");
								fprintf(config,"\n\n");
							}
							fclose(config);
							/*En vue d'une configuration*/
							if(erreur==0)
							{
								sprintf(buffer,"xcopy %s %s%s /E /I",dossier,chemin, backup);
								system(buffer);
								strftime(date, sizeof(date),"%Y-%m-%d_%H-%M-%S", localtime(&timestamp));
								sprintf(buffer2,"ren %s%s %s_%s",chemin,backup,backup,date);
								system(buffer2);
							}
							Sleep(6000);
							return 0;
						}