IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Readdir et écriture de fichiers


Sujet :

C

  1. #1
    Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 9
    Points : 4
    Points
    4
    Par défaut Readdir et écriture de fichiers
    Merci à celui qui m'aidé la dernière fois.

    Je suis en stage actuellement, je suis en réseau et mon maitre de stage m'a demandé de réaliser un programme pour la gestion des fichiers sur le serveur ... que ceux ci soit remis à jour dans un fichier index en html. J'ai donc découvert le c lundi dernier et aujourd'hui je me dis que si je touche plus au programme je vais encore plus le bugger. Je vous montre le code et si vous avez des conseils à me donner ... n'hésitez pas svp.

    merci à tous

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <dirent.h>
    #include <string.h>
    #include <time.h>
     
    FILE * f1, * f2, * f3;
    DIR * dossier;
    struct dirent *tableau;
    char *tab[10000], *tabfich[10000], *tabdossier[10000];
    char *nomfich[50],*nomfich2[50];
    char *nomdoss[50], *nomdoss2[50];
    char *annee[50];
    int compt, ouinon=0, temp=0;
     
    /*Recupère l'année en cours*/
    void RecupereAnnee(int AnneeEnCours)
    {
        struct tm * tempstotal;
        time_t t;
        time(&t);
        tempstotal=localtime(&t);
        AnneeEnCours=1900+tempstotal->tm_year;
    }
     
    /*Lecture des fichiers et des tableaux*/
    void Lecture()
    {
        int i=0, j, *test;
        char tabtest[10000];
        ouinon=1;
        while ((tableau=readdir(dossier))!=NULL)
            {
                tab[j]= malloc(strlen((tableau->d_name)+1));
                strcpy(tab[j],tableau->d_name);
                tabfich[j]=malloc(strlen((tableau->d_name)+1));
     
                if ((test=strlen(tableau->d_name))>20)
                {
                    j++;
                    temp++;
                }
            }
            j=0;
        while (fscanf(stdin,"%s", tabtest[j]))
            {
                if (strcmp(tab[j], tabtest)!=0)
                {
                    ouinon=1;
                    tabfich[i]=tab[j];
                    i++;
                }
            }
    }
     
    /*Ecriture de Fichier*/
    void EcritureFichiers(temp)
    {
        int j=0;
        for (j=0;j<=temp;j++)
        {
            fprintf(f1,"%s\n",tabfich[j]);
            fprintf(f2,"<a href=\"%s\">%s</a><br>", tabfich[j], tabfich[j]);
        }
    }
     
    /*Ecriture direct si fichiers n'existent pas*/
    void EcritureDirect()
    {
        int j=0, test;
        while ((tableau=readdir(dossier))!=NULL)
            {
                tabfich[j]= malloc(strlen(tableau->d_name)+1);
                strcpy(tabfich[j],tableau->d_name);
                test=strlen(tableau->d_name);
                fprintf(f1,"%s\n",tabfich[j]);
                fprintf(f2,"<a href=\"%s\">%s</a><br>", tabfich[j], tabfich[j]);
                j++;
            }
    }
     
    void CreateName(int compt)
    {
        sprintf(annee,"repertoire%d",compt);
        sprintf(nomdoss,"./%s/index%d.txt",annee,compt);
        sprintf(nomdoss2,"./%s/index%d.htm",annee,compt);
        sprintf(nomfich,"index%d.txt",compt);
        sprintf(nomfich2,"index%d.htm",compt);
    }
     
     
    /* Programme principale*/
    void main()
    {
        int j, AnneeEnCours;
        compt=1995;
        RecupereAnnee(AnneeEnCours);
        /*Mises à jours éffectuées sur plusieurs années.*/
        while (compt<=AnneeEnCours)
        {
            CreateName(compt);
            /*Test : le répertoire existe-t-il ?*/
            if ((dossier=opendir(annee))!=NULL)
            {
                if (((f1=fopen(nomdoss,"r"))!=NULL)&&((f2=fopen(nomdoss2,"r"))!=NULL))
                {
                    /*Le premier fichier fait office d'index pour les mises à jours.*/
                    fclose(f1);
                    fclose(f2);
                    ouinon=1;
                    f2=fopen(nomdoss2,"a");
                    printf("%s;\n",f1);
                    f1=fopen(nomdoss,"a");
                    printf("%s;\n",f2);
                 }
                 else
                {
                    ouinon=0;
                    f2=fopen(nomdoss2,"w");
                    printf("%s;\n",nomdoss);
                    f1=fopen(nomdoss,"w");
                    printf("%s;\n",nomdoss2);
                }
                if (ouinon==1)
                {
                    Lecture();
                    /*Test : Si les deux chaines de caractères sont égales alors ...*/
                    EcritureFichiers(temp);
                    fclose(f1);
                    fclose(f2);
                    closedir(dossier);
                    if (AnneeEnCours==compt)
                    {
                        f3=fopen("newsletter.htm","w");
                        for (j=0;j<temp;j++)
                        {
                            fprintf(f3,"<a href=\"%s/%s\">%s</a>", annee, tab[j], tab[j]);
                        }
                        fclose(f3);
                    }
                }
                else
                {
                EcritureDirect();
                }
            }
            compt++;
        }
    }

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 723
    Points
    5 723
    Par défaut
    Un conseil : Fais une sauvegarde du fichier quand il marchait bien ( ou même de tout le repertoire projet)ainsi tu pourras bosser tranquillement sans te faire de frayeurs sur les modifications que tu apportes

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 241
    Points : 83
    Points
    83
    Par défaut
    Et ya pas de doutes que quand ya pas de doutes, ya un dout, ya un doute?

  4. #4
    Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Je croise les doigts je crois en avoir un sur mon pc portable à la maison ... mais marcher bien c'est gros dire tout de même ...

  5. #5
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 723
    Points
    5 723
    Par défaut
    Citation Envoyé par petdelascar
    Et ya pas de doutes que quand ya pas de doutes, ya un dout, ya un doute?
    A ton avis ?

  6. #6
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Quelques remarques sur le code:
    - les variables globales sont inutiles dans ce contexte. Elles devraient etre definies dans le bloc de main() et passees en argument des fonctions qui en ont besoin.

    - les fonctions comme fopen() ou malloc() peuvent echouer. Il est necessaire de tester leur valeur de retour. Si c'est a l'interieur d'une fonction, la fonction doit donc retourner un code signifiant qu'une de ces composantes a echoue.

    - main() renvoit un int. Celui-ci a la valeur 0 ou EXIT_SUCCESS en cas de reussite du programme, EXIT_FAILURE en cas d'echec.

    - toute memoire allouee par malloc() doit etre liberee par un free() correspondant.

  7. #7
    Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par DaZumba
    Quelques remarques sur le code:
    - les variables globales sont inutiles dans ce contexte. Elles devraient etre definies dans le bloc de main() et passees en argument des fonctions qui en ont besoin.

    - les fonctions comme fopen() ou malloc() peuvent echouer. Il est necessaire de tester leur valeur de retour. Si c'est a l'interieur d'une fonction, la fonction doit donc retourner un code signifiant qu'une de ces composantes a echoue.

    - main() renvoit un int. Celui-ci a la valeur 0 ou EXIT_SUCCESS en cas de reussite du programme, EXIT_FAILURE en cas d'echec.

    - toute memoire allouee par malloc() doit etre liberee par un free() correspondant.
    oki doki là déjà ça me donne de sacré piste
    Merci beaucoup

Discussions similaires

  1. [Rman]problème écriture sur fichier (linux)
    Par turlut dans le forum Oracle
    Réponses: 20
    Dernier message: 30/08/2006, 05h52
  2. [VB6] lecture et écriture de fichier
    Par robert_trudel dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 12/06/2006, 14h06
  3. Réponses: 2
    Dernier message: 29/05/2006, 09h54
  4. [VB.NET]Problème de lecture et écriture sur fichier texte
    Par zouhib dans le forum Windows Forms
    Réponses: 25
    Dernier message: 23/05/2006, 15h30
  5. Réponses: 2
    Dernier message: 15/11/2005, 09h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo