lordankou | après une légère vérification si il n'y avait pas de variable locale en global (y'en avait pas c rassurant) voila le code :
Code :
- // ----------------------------
- // Corps du programme principal
- // ----------------------------
- int WINAPI WinMain (HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int iCmdShow)
- {
- // Declaration des variables
- // Variables OpenGl
- WNDCLASS wc;
- HWND hWnd; // handle de la fenetre (identifiant)
- HDC hDC; // device context
- HGLRC hRC; // context de rendu
- MSG msg;
- BOOL bQuit = FALSE;
- float theta = 0.0f;
- // variable gestion Fichier
- char *NomFichierSource = "VBroc16av.vit_f00007.mtv"; // nom du fichier MTV contenant les vitesses des courants
- char **NomTabFichier; // tableau contenant le nom des fichiers
-
- // parcours repertoire
- // on va parcourir le répertoire et récupérer tous les noms
- ParcoursFichier(100 , &NomTabFichier );
-
- // Gestion des fichiers
- // gestion du fichier vitesse de courant
- GestionFichier(NomFichierSource);
- // Gestion Fichier
- // cette fonction va gérer tous les fichiers sources contenant les vecteurs vitesses
- void GestionFichier(char* NomFichier){
- // déclaration des variables
- FILE *nomFichierVintMTV; // identifiant du fichier MTV contenant les vitesses des courants
- // ouverture d'un fichier
- nomFichierVintMTV = ouvertureFichier(NomFichier);
- // traitement du fichier
- traitementFichier(nomFichierVintMTV);
- // fermeture du fichier
- fermerFichier(nomFichierVintMTV);
- }
- // ouverture d'un fichier
- // cette fonction va ouvrir en lecture le fichier passer en parametre
- FILE * ouvertureFichier(char * nom){
- FILE * IdentifiantFIchier ;
- // on ouvre le fichier en mode lecture
- if ((IdentifiantFIchier = fopen(nom, "r" )) == NULL)
- {
- printf ("can't open file : %s, file not exist", nom);
- exit(0);
- }
- };
- // traitement du fichier
- // cette fonction va traiter le fichier passer en parametre
- void traitementFichier(FILE *fichierTraiter){
- char ligne[255]; // taille d'une ligne
- int j ; // variable pour le parcours des colonnes
- int i = 0 ; // variable pour les ligne de donnees
- int varParcours ; // variable pour le parcours du tableau de vecteurs
- int col ; // variable pour le parcours des colonnes du tableau de vecteurs.
- char* mot; // coordonnees sous forme de chaine de caractère
- char* separateurEspace = " "; // separateur pour les colonnes
- // lecture des 9 premieres lignes pour afficher les caractéristiques
- for (i=0; i<9; i++){
- // lecture d'une ligne
- fgets(ligne, 255, fichierTraiter);
- }
- // on remet i à 0
- i=0;
- // lecture des coordonnées de chaque vecteurs
- while (fgets(ligne,255, fichierTraiter) != NULL){
- // on va decouper la ligne selon les espaces
- // on decoupe le premier mot -> on recupere X
- mot = strtok(ligne, separateurEspace);
- // on decoupe la ligne selon les espaces -> on recupere Y,Z, Vx,Vy,Vz
- for (j=0; j<6; j++){
- // on enregistre la coordonnes dans un tableau
-
- tabCoordonnees[i][j] = atof(mot);
- mot = strtok(NULL,separateurEspace);
- }
- // on incrémente le nombre de ligne parcouru
- i++;
- }
- // initialisation des extremes
- maxX = tabCoordonnees[j][0];
- minX = tabCoordonnees[j][0];
- maxY = tabCoordonnees[j][1];
- minY = tabCoordonnees[j][1];
- maxZ = tabCoordonnees[j][2];
- minZ = tabCoordonnees[j][2];
-
- // recherche des 6 points extremes : maxX,minX,maxY,minY,maxZ,minZ.
- // parcours des i lignes du tableau
- for (j=0; j<i; j++){
-
- // recherche du maxX
- if (tabCoordonnees[j][0]>maxX){
- maxX = tabCoordonnees[j][0] ;
- }
-
- // recherche du minX
- if (tabCoordonnees[j][0]<minX){
- minX = tabCoordonnees[j][0] ;
- }
-
- // recherche du maxY
- if (tabCoordonnees[j][1]>maxY){
- maxY=tabCoordonnees[j][1] ;
- }
-
- // recherche du minY
- if (tabCoordonnees[j][1]<minY){
- minY=tabCoordonnees[j][1] ;
- }
-
- // recherche du maxZ
- if (tabCoordonnees[j][2]>maxZ){
- maxZ=tabCoordonnees[j][2] ;
- }
-
- // recherche du minZ
- if (tabCoordonnees[j][2]<minZ){
- minZ=tabCoordonnees[j][2] ;
- }
- }
- // determination de la difference des extremes
- diffX = maxX - minX; // diff des X
- diffY = maxY - minY; // diff des Y
- diffZ = maxZ - minZ; // diff des Z
- // definition des echelles
- echelleX = 2/diffX;
- echelleY = 2/diffY;
- echelleZ = 2/diffZ;
- nbrligne=i;
- };
- // fermeture du fichier
- // cette fonction va fermer le fichier passé en parametre
- void fermerFichier(FILE *fichierFermer){
- // fermeture du fichier
- fclose(fichierFermer);
- };
- // parcours repertoire
- // cette fonction va parcourir le répertoire test et récup tous les fichiers mtv
- void ParcoursFichier(int NombreLigne, char*** TabFichier){
- // declaration des variables
- DIR * repertoire ; // definition d'une variable de type Repertoire
- char * NomRep = "TEST" ; // Nom du répertoire test
- struct dirent *entree ; //une entree du repertoire
- char * separateur = ".mtv" ; // type de fichier recherché
-
- char *p ; // variable temporaire
- int iParcours = 0; // variable temporaire
- // allocation de la mémoire pour la variable NomTabFichier
- *TabFichier = (char **) malloc(NombreLigne * sizeof(char *)); // char ** pour la conversion du pointeur renvoyé par malloc
- //vérification de l'allocation
- if (TabFichier == NULL)
- {
- printf ("l'allocationde la mémoire a échoué. Fin du programme \n" ) ;
- exit (0) ;
- }
- //ouverture du répertoire
- repertoire = opendir(NomRep);
- // parcours du répertoire
- while((entree=readdir(repertoire))!=NULL)
- {
- // on verifie si elle contient la sous chaine ".mtv"
- p = strstr(entree->d_name,separateur);
- if (p!=NULL)
- {
-
- // allocation de l'espace memoire
- (*TabFichier)[iParcours] = (char *)malloc(sizeof(entree->d_name));
-
- // copie du nom du répertoire
- strcpy((*TabFichier)[iParcours],entree->d_name);
-
- // on incremente la variable iParcours
- iParcours++ ;
-
- }
- }
-
- // on ferme le répertoire
- closedir(repertoire);
- }
|
les deux fonction en gras en haut pose problème. quand les deux sont activé en même ça "plante" mais sans message d'erreur. si je mes l'une ou l'autre en commentaire c bon ça plante pas mais bon j'ai besoin des deux.
Sinon dans la fonction gestionfichier l'erreur se produit quand j'essaie d'ouvrir le fichier (il existe bien j'ai les droits dessus). ou alors si j'effectue tout opération sur le pointeur de fichier il plante.
dans parcoursfichier l'erreur se situe à ce niveau ci : Code :
- strcpy((*TabFichier)[iParcours],entree->d_name);
|
N.B : le code n'est pas du tout terminé et il faut que je remplace les tableaux statiques par des tableaux dynamique (mais bon plus tard quand ça marchera). Message édité par lordankou le 25-05-2004 à 15:52:51 ---------------
|