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 :

Tableau de pointeurs de fichiers


Sujet :

C

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 10
    Points : 8
    Points
    8
    Par défaut Tableau de pointeurs de fichiers
    Bonjour à tous.

    Je suis actuellement occupé à travailler sur un projet qui nécessite d'ouvrir une multitude de fichiers en parallèle.

    Pour ce faire, j'aimerais utiliser un tableau de pointeurs de fichiers. J'utilise donc ce code :
    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
     
        /*************************************************
        *
        *   Création d'un tableau de pointeurs de fichiers
        *
        **************************************************/
        fileNumber = 10;
        currentFile = 0;
     
        FILE *fileTab[40];
        char extensionBMP[5] = ".bmp";
        char temp[10];
        char nextFile[50];
     
        while(currentFile < 40)
        {
            fileTab[currentFile] = NULL;
     
            strcpy(nextFile, "\0");
            strcpy(temp, "\0");
            itoa(fileNumber, temp, 10);
            strcat(nextFile, temp);
            strcat(nextFile, extensionBMP);
     
            fileTab[currentFile] = fopen(nextFile,"rb");
     
            if(fileTab[currentFile] == NULL)
            {
                printf("\nErreur a l'ouverture du fichier numero %d.", currentFile);
                exit(-1);
            }
     
            fileNumber += 10;
            currentFile++;
        }
     
        currentFile = 0;
     
        while(currentFile < 40)
        {
            fclose(fileTab[currentFile]);
            currentFile++;
        }
        printf("\ntest\n");
    Cependant, en compilant et en exécutant le programme, j'ai reçu 2 retours différents : le statut 4 et le statut 6.

    Le programme arrive bien à m'afficher "Test" (qui est à la fin de mon main). Je ne comprends pas les 2 statuts d'erreur et j'aimerais pouvoir les résoudre avant de continuer à programmer.

    Pouvez-vous m'aider ?

    D'avance, je vous remercie.

    Cordialement.

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    Je pense que le problème ne vient pas forcement de la boucle, mais peut être de ce qui est autour. Peux tu poster un code minimal qui compile ?

    Un système peut aussi être limité dans le nombre maximum de fichier qu'il peut ouvrir, mais je ne pense pas que ton problème soit ici.

    Sinon, voici le même code, avec une génération simplifiée du nom de fichier :
    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
    #include <stdio.h>
    #include <stdlib.h>
    int main(void)
    {
        /*************************************************
        *
        *   Création d'un tableau de pointeurs de fichiers
        *
        **************************************************/
        int fileNumber = 10;
        int currentFile = 0;
     
        FILE *fileTab[40];
     
        while (currentFile < 40) {
            /* memoire pour stocker le nom du fichier */
            char filename[64] = "";
            /* creaton du nom */
            sprintf(filename, "%d.bmp", currentFile);
     
            /* ouverture du fichier */
            fileTab[currentFile] = fopen(filename, "rb");
     
            if (fileTab[currentFile] == NULL) {
                perror(filename);
                exit(-1);
            }
     
            fileNumber += 10;
            currentFile++;
        }
     
        currentFile = 0;
     
        while (currentFile < 40) {
            fclose(fileTab[currentFile]);
            currentFile++;
        }
        printf("\ntest\n");
     
        return 0;
    }

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Voici le code complet ce que que j'utilise pour le moment.

    Je ne connaissais pas d'autres techniques pour ouvrir des fichiers spécifiques.

    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <windows.h>
    #include <sys/types.h>
     
    static void purger(void)
    {
        int c;
     
        while ((c = getchar()) != '\n' && c != EOF)
        {}
    }
     
    static void clean (char *chaine)
    {
        char *p = strchr(chaine, '\n');
     
        if (p)
        {
            *p = 0;
        }
     
        else
        {
            purger();
        }
    }
     
    int main()
    {
        char password[50];
     
        int zz = 0, zo = 0, oz = 0, oo = 0, again = 1;
        int maxMessageSize = 0;
     
        /*************************************************************************************************
        *
        *   Récupération de la clé. On calcule ensuite le nombre de caractères maximum qu'on pourra entrer
        *
        **************************************************************************************************/
        do
        {
            // On commence par récupérer le message à incruster au sein de notre image
            printf("Veuillez entrer la cle steganographique : ");
            fgets(password, sizeof password, stdin);
            clean(password);
     
            if(strlen(password) >= 10 && strlen(password) <= 30)
            {
                printf("\nMot de passe accepte !");
                again = 0;
            }
            else printf("\nLa taille doit etre comprise entre 10 et 30 inclus.\n");
     
        }while(again == 1);
     
        int stegaTable[9000];
        int i, currentFile, fileNumber;
     
        /*************************************************
        *
        *   Création d'un tableau de pointeurs de fichiers
        *
        **************************************************/
        fileNumber = 10;
        currentFile = 0;
     
        FILE *fileTab[40];
        char extensionBMP[5] = ".bmp";
        char temp[10];
        char nextFile[50];
     
        while(currentFile < 40)
        {
            fileTab[currentFile] = NULL;
     
            strcpy(nextFile, "\0");
            strcpy(temp, "\0");
            itoa(fileNumber, temp, 10);
            strcat(nextFile, temp);
            strcat(nextFile, extensionBMP);
     
            fileTab[currentFile] = fopen(nextFile,"rb");
     
            if(fileTab[currentFile] == NULL)
            {
                printf("\nErreur a l'ouverture du fichier numero %d.", currentFile);
                exit(-1);
            }
     
            fileNumber += 10;
            currentFile++;
        }
     
        currentFile = 0;
     
        while(currentFile < 40)
        {
            fclose(fileTab[currentFile]);
            currentFile++;
        }
        printf("\ntest\n");
    }
    Même si je pense réutiliser votre code, j'aimerais au moins comprendre l' / les erreurs du mien.

    Cordialement.

  4. #4
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par Gandalf2008 Voir le message
    Même si je pense réutiliser votre code, j'aimerais au moins comprendre le / les erreurs du mien.


    Le problème est tout bête : ta fonction main est déclarée int, mais ne renvoie rien.

    Pour corriger le problème, il suffit d'écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int main() {
        /* le code */
     
        /* les usages veulent qu'on renvoie 0 si tout est OK */
        return 0;
    }
    Un compilateur bien configuré aurait levé un warning, a-t-il été ignoré ? Un lien pour bien configurer son compilateur : http://emmanuel-delahaye.developpez....-codage-c/#LVI
    Dernière modification par Deepin ; 26/07/2011 à 10h07.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Et dire que je passe parfois des heures pour des bétises ...

    Merci beaucoup pour votre aide !

  6. #6
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par Gandalf2008 Voir le message
    Et dire que je passe parfois des heures pour des bétises ...

    Merci beaucoup pour votre aide !
    De rien.

    Pense au bouton

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [GCC] Tableau de pointeurs pour accès multiples en asm
    Par Flo. dans le forum x86 32-bits / 64-bits
    Réponses: 2
    Dernier message: 12/12/2005, 08h47
  2. Réponses: 5
    Dernier message: 21/11/2005, 01h40
  3. [swig] python->C->python, pointeur de fichier
    Par PyBio dans le forum Interfaçage autre langage
    Réponses: 1
    Dernier message: 10/11/2005, 15h50
  4. tableau de pointeurs
    Par seal3 dans le forum C++
    Réponses: 7
    Dernier message: 01/11/2005, 20h51
  5. Tableau de pointeurs de fonctions
    Par Alp dans le forum C++
    Réponses: 7
    Dernier message: 29/10/2005, 13h19

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