From 24bc95ab9e6875e7c6b4d668bfd1e4e9275c60be Mon Sep 17 00:00:00 2001 From: dling <dylan.ling.etu@univ-lille.fr> Date: Wed, 20 Dec 2023 22:43:49 +0100 Subject: [PATCH] =?UTF-8?q?ajout=20de=20la=20fonction=20append=20=C3=A0=20?= =?UTF-8?q?la=20commande=20TYPE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SD/picofs.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/SD/picofs.c b/SD/picofs.c index 0878e48..ba75910 100755 --- a/SD/picofs.c +++ b/SD/picofs.c @@ -254,7 +254,7 @@ void TYPE(SD_info *sd, char *filename, char *data) { int block_counter = 1; //compteur de blocs utilisés int index_in_descrBlock = 0; int offset; - + int append_command = -1; if (sizeFilename > MAX_FILENAME_LENGTH) { printf("\nImpossible de créer le fichier, nom trop long\n"); @@ -265,7 +265,19 @@ void TYPE(SD_info *sd, char *filename, char *data) { for (int blockNum = 0; blockNum < MAX_BLOCKS_IN_SUPERBLOCK; blockNum += 16) { readBlock(sd,blockNum, 0, buffer, MAX_FILENAME_LENGTH); // Vérifier si le bloc est vide (pas de nom de fichier) - if (buffer[0] == 0) { + if (strncmp(buffer,filename,strlen(filename))==0) //si même nom de fichier alors on concatenne les data + { + append_command = 1; + char append_description_buffer[CHUNK_SIZE]; // récupère le numéro du bloc dans la description + char append_buffer[CHUNK_SIZE]; //récupère les données finales à écrire dans le bloc de donnée + readBlock(sd, blockNum+1, 0, append_description_buffer, 2); + int dataBlockNum = reconstituteNumber(append_description_buffer); + readBlock(sd, dataBlockNum, 0, append_buffer, CHUNK_SIZE); + strcat(append_buffer, data); //former les données finales + writeBlock(sd, dataBlockNum, 0, append_buffer, CHUNK_SIZE); // écrire dans bloc de donnée, rien à fiare dans description + break; + } + else if (buffer[0] == 0) { // Écrire le nom du fichier dans l'emplacement vide du superbloc if (sizeFilename < MAX_FILENAME_LENGTH) { sizeFilename += 1; // Ajouter '\0' s'il y a de la place @@ -336,7 +348,8 @@ void TYPE(SD_info *sd, char *filename, char *data) { if (placeFound != -1) { printf("Le fichier \"%s\" a été créé avec succès.\n", filename); } else { - printf("Plus de place dans le système de fichier pour créer ce fichier.\n"); + if(append_command == 1) printf("Les données ont été concaténées dans le fichier %s\n",filename); + else printf("Plus de place dans le système de fichier pour créer ce fichier.\n"); } -- GitLab