Duplicateur de fichiers

Description

Programme servant à dupliquer n'importe quel fichier.
Faites glisser un fichier sur l'exécutable et entrer le nombre de copies désirées (INT_MAX au maximum).
Les fichiers copiés auront même nom et extension que le fichier original et seront normalement copiés dans le répertoire oû se situe l'exécutable.
N'oubliez pas le .zip.

Source / Exemple :


/* 0v3rb1t */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* taille du bloc en memoire */
#define TAILLE_BUFFER (1024*32)

/* Prototype de la fonction copie_fichier */
void copie_fichier(FILE *fichier_source, char chemin_absolu[]);

int main(int argc, char *argv[])
{
    FILE *fichier_source = NULL;

    /* Si l'utilisateur n'a pas fait glisser un fichier sur l'executable, on lui rappelle */
    if(argc<2)
    {
        printf("Faites glisser un fichier sur l'executable.");
        getchar();
        return EXIT_SUCCESS;
    }

    /* Ouverture du flux vers le fichier source */
    fichier_source = fopen(argv[1], "rb");

    /* Si l'ouverture a echoue on quitte */
    if(fichier_source==NULL)
    {
        fprintf(stderr, "erreur lors de l'ouverture du fichier source");
        getchar();
        exit(EXIT_FAILURE);
    }

    /* On appelle la fonction qui va dupliquer le fichier */
    copie_fichier(fichier_source, argv[1]);

    printf("Copie effectuee avec succes");
    getchar();

    return EXIT_SUCCESS;

}

void copie_fichier(FILE *fichier_source, char chemin_absolu[])
{
    int numero_fichier, taille_nom, nombre_copies, i, j, k;
    size_t longueur;
    char nom_fichier[100] = "", numero_fichier_caractere[10]= "", extension[10] = "";
    FILE *fichier_copie = NULL;
    /* On alloue un bloc de memoire necessaire a la copie du fichier source */
    unsigned char *zone_allouee = malloc(TAILLE_BUFFER);

    /* Si l'allocation a echouee on quitte */
    if(zone_allouee==NULL)
    {
        fprintf(stderr, "erreur lors de l'allocation de memoire");
        getchar();
        fclose(fichier_source);
        exit(EXIT_FAILURE);
    }

    /* On separe et stocke le nom et l'extension du fichier dans deux chaines differentes */
    for(i=0; chemin_absolu[i] != '\0'; i++)
    {

        if(chemin_absolu[i] == '.')
        {

            for(j=i; chemin_absolu[j] != '\\'; j--);

            j++;
            for(k=0; chemin_absolu[j] != '.'; j++, k++)
                nom_fichier[k] = chemin_absolu[j];

            for(k=0; chemin_absolu[j] != '\0'; j++, k++)
                extension[k] = chemin_absolu[j];

        }
    }

    taille_nom = strlen(nom_fichier);

    /* On demande le nombre de copies a l'utilisateur */
    do
    {
        printf("Nombre de copies: ");
        scanf("%d",&nombre_copies);
    }
    while(nombre_copies < 0);

    puts("");

    /* Boucle de duplication du fichier source */
    for(numero_fichier=0; numero_fichier < nombre_copies; numero_fichier++)
    {
        /* On initialise la chaine qui contient le numero du fichier a 0 */
        for(i=0;numero_fichier_caractere[i] != '\0'; i++)
        {
            numero_fichier_caractere[i] = 0;
        }
        /* On efface tous les caracteres se situant apres le nom du fichier */
        for(i=taille_nom;nom_fichier[i] != '\0'; i++)
        {
            nom_fichier[i] = 0;
        }

        /* On convertie le numero entier du fichier en sa representation sous forme de caracteres */
        sprintf(numero_fichier_caractere, "%d", numero_fichier+2);
        /* On concactene le numero du fichier a son nom */
        strcat(nom_fichier, numero_fichier_caractere);
        /* On concactene l'extension du fichier a son nom+numero */
        strcat(nom_fichier, extension);

        /* Ouverture du flux vers le fichier de copie */
        fichier_copie = fopen(nom_fichier, "wb");
        /* Si l'ouverture a echoue on quitte */
        if(fichier_copie==NULL)
        {
            fprintf(stderr, "erreur lors de l'ouverture du fichier copie");
            getchar();
            free(zone_allouee);
            fclose(fichier_source);
            exit(EXIT_FAILURE);
        }
        /* On copie le contenu du fichier source dans le fichier copie */
        while((longueur = fread(zone_allouee,1,TAILLE_BUFFER,fichier_source)) != 0)
        {
            fwrite(zone_allouee,1,longueur,fichier_copie);
        }

        /* On remet le curseur au debut du fichier source */
        rewind(fichier_source);
        /* On ferme le flux du fichier copie */
        fclose(fichier_copie);
    }
    /* Une fois les copies terminees on ferme le flux du fichier source */
    fclose(fichier_source);
    /* On libere la memoire allouee pour la copie du fichier source */
    free(zone_allouee);

}

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.