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
|
// Fonction : postInfos
// Sauvegarde le contenu d'une variable de type Membre dans le fichier de sauvegarde
int membres_postInfos (Membre record, char *buffer){
char file_url[] = "./data/membres.dat";
bool nouveau = false; // Indication de nouveauté de l'enregistrement
bool write_result = false; // Indication de succès de l'écriture
bool identifying_result = false; // Indication de succès de l'identification
int id=record.id; // Identifiant de l'enregistrement
int index = id-1; // Index de l'enregistrement dans le fichier
FILE* fichier_1 = fopen (file_url, "wb"); // Premiere ouverture pour "creation du fichier"
if (fichier_1 != NULL){ // Si le fichier a bien été ouvert... on le ferme (sic!)
fclose (fichier_1);
}
if (id > 0){ // Si l'enregistrement est déjà identifié (parce qu'existant déjà dans le fichier par exemple).
record.present = true; // Marquage comme "présent"
identifying_result = true; // Succès de facto de l'identification
}else{
index = membres_placeLibre (); //Sinon on recherche une place libre dans le fichier
if (index > -1){ //Si une place libre a été trouvée
record.present = true; // Marquage comme "présent"
id = index+1; // Creation d'une ID a partir de cette place
record.id = id; // Implentation de cette ID
nouveau = true;
identifying_result = true; // Succès de l'identification
}
}
if (identifying_result){ //Si l'enregistrement a été identifié
FILE* fichier = fopen (file_url, "wb");
if (fichier != NULL){ //Si le fichier a bien été ouvert
if (index > 0){ //Si la place trouvée n'est pas au début du fichier : on se déplace jusque là.
printf("fseek : %i\n", fseek(fichier, index * sizeof(record), SEEK_SET));
}
if (fwrite(&record, sizeof(record), 1, fichier)){ // Ecriture de l'enregistrement dans le fichier
write_result = true; //Succès de facto de l'ecriture
}
fclose (fichier);
}else{
printf("[res_postInfos()] - FILE_ERROR : Erreur d'ouverture de %s\n", file_url);
}
if (write_result){ //Si l'écriture a réussie : XML de succès avec la nouvelle ID de l'objet
char id_str[5];
sprintf(id_str, "%d", id);
strcat(buffer, "<post><success>1</success>");
if (nouveau){
strcat(buffer, "<new_id>");
strcat(buffer, id_str);
strcat(buffer, "</new_id>");
}
strcat(buffer, "</post>");
}else{
// Sinon : ERREUR XML d'écriture
Erreur error;
strcpy(error.code, "WRITE_ERROR");
strcpy(error.titre, "L'ecriture dans le fichier a echoue pour une raison inconnue.");
pushErreur(error);
}
}else{
// Sinon : ERREUR XML d'identification
Erreur error;
strcpy(error.code, "ID_ERROR");
strcpy(error.titre, "Impossible d'identifier l'objet avec un nouvel identifiant.");
pushErreur(error);
}
return id;
} |