Concaténation de deux fichiers
#include "t_bool.h" #include "file_tools.h" #include <stdlib.h> #include <stdio.h> #include <string.h> /* Nom du fichier temporaire. */ #define TEMP_FILE "example.txt" /* Liste, non exhaustive, de delimiteurs */ #define DELIM " *§:/;!.,?&~<>{([|])}\"\\+=" /* ----------------------------------------------------- file_tools_concat ----------------------------------------------------- Concatenation de fichiers. ----------------------------------------------------- arg : Fichier 1. arg : Fichier 2 a concatener dans le fichier 1. return: true si la concatenation est un succes sinon false. ----------------------------------------------------- */ t_bool file_tools_concat (char const * const s_file1, char const * const s_file2) { FILE * p_file_1 = NULL; FILE * p_file_2 = NULL; char * s_buffer = NULL; int nb_read = 0; t_bool bool = true; /* ----- Verification des arguments ----- */ if (!s_file1 || !s_file2) { /* Erreur: arguments invalides. */ return false; } /* ----- */ /* ----- Ouverture des fichiers ----- */ /* Ouverture du fichier 1. */ p_file_1 = fopen (s_file1, "ab"); if (!p_file_1) { /* Erreur: impossible d'ouvrir le fichier 1. */ return false; } /* Ouverture du fichier a concatener avec 1. */ p_file_2 = fopen (s_file2, "rb"); if (!p_file_2) { /* Erreur: impossible d'ouvrir le fichier a concatener avec file 1. */ fclose (p_file_1); return false; } /* ----- Allocation du buffer temporaire ----- */ s_buffer = malloc (BUFSIZ); if (!s_buffer) { /* Erreur: impossible d'allouer l'espace requis. */ fclose (p_file_1); fclose (p_file_2); return false; } /* ----- Concatenation des fichiers ----- */ while ((nb_read = fread (s_buffer, 1, BUFSIZ, p_file_2)) != 0) { fwrite (s_buffer, 1, nb_read, p_file_1); memset (s_buffer, 0, sizeof (s_buffer)); } /* Fermeture des fichiers. */ fclose (p_file_1); fclose (p_file_2); /* Liberation du buffer temporaire. */ free (s_buffer); s_buffer = NULL; return bool; }
Vous pouvez retrouver cette fonction ainsi que toutes les autres fonctions de la catégorie Fichier dans l'archive file_tools.zip.
L'archive comprends les fichiers suivants :
- example1.txt et example2.txt deux fichiers utilisés par la méthode main.
- t_bool.h : déclaration du type booléen.
- file_tools.h et file_tools.c : déclaration et implémentation des fonctions de la catégorie Fichier.
- main.c : fonction permettant et mettant en œuvre l'ensemble des fonctions Fichier.
Exécution
$gcc main.c file_tools.c -o filetools $chmod +x filetools $./filetools