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
file_tools.zip