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 :

Ouverture de fichier et boucle


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Février 2008
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 190
    Par défaut Ouverture de fichier et boucle
    Bonjour à tous,

    voilà je suis en train de terminer un petit programme pour recopier des fichiers tout en donnant des noms précis (déterminé dans une chaîne).

    Voici le bout de code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    	FILE *fOld = fopen(argv[1], "rb");
     
    	if (fOld != NULL) {
    		while (MaPile) {
    			FILE *fNew = fopen(MaPile->nomFichier, "wb");
    			copieFichier (fOld, fNew);
    			fclose(fNew);
    			MaPile = MaPile->prec;
    		}
    	}
    Il fonctionne, dans le sens où tous mes fichiers sont créés.
    Par contre, seul, le dernier fichier entré dans ma chaîne est bien copié.
    Les autres fichiers sont créés mais vide.
    Pour que celà fonctionne correctement, je dois faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    FILE *fOld = fopen(argv[1], "rb")
     
    	if (fOld != NULL) {
    		while (MaPile) {
                            FILE *fOld = fopen(argv[1], "rb");
    			FILE *fNew = fopen(MaPile->nomFichier, "wb");
    			copieFichier (fOld, fNew);
    			fclose(fNew);
    			MaPile = MaPile->prec;
    		}
    	}
    Ma question est toute simple, est-ce normal ?
    Je veux dire, je pensais qu'en ouvrant mon fichier avant la boucle la variable était toujours disponible est donc avec le contenu du fichier.

    N'est-pas trop lourd de fonctionner comme ca ?

    Merci de vos réponses et de votre aide.

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Lorsque tu dis que seul le dernier est correct, est-ce le premier créé ?

  3. #3
    Membre confirmé
    Inscrit en
    Février 2008
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 190
    Par défaut
    Le dernier en fait mais il est en première position dans la chaine...

  4. #4
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Le dernier en fait mais il est en première position dans la chaine...
    Je ne comprend pas ce que tu veux dire. Ce qui m'intéresse c'est de savoir si c'est bien le premier fichier créé par fopen(MaPile->nomFichier, "wb") qui est correct ce que je crois.
    Après, si copieFichier (fOld, fNew) copie tout le fichier, on est arrivé à la fin du fichier en lecture et il n'y a plus rien à écrire dans les autres fichiers qui sont alors créés mais vides. Il faut repartir au début du fichier de lecture, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    	FILE *fOld = fopen(argv[1], "rb");
    	
    	if (fOld != NULL) {
    		while (MaPile) {
    			FILE *fNew = fopen(MaPile->nomFichier, "wb");
    			copieFichier (fOld, fNew);
    			fclose(fNew);
    			MaPile = MaPile->prec;
                            rewind(fOld);
    		} 	
            }

  5. #5
    Membre confirmé
    Inscrit en
    Février 2008
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 190
    Par défaut
    Pardon je parlais de ma chaine et non des fichiers.

    Gros naze (je me pointe du doigt), effectivement avec le Rewind ca fonctionne, j'y ai pas du tout pensais...

    Merci pour tes réponses.

    Par contre, j'ai un dernier soucis et après mon programme est ok.

    Voilà, en ligne de commande j'écris le nom de l'executable et je met en argument le nom d'un fichier. Il récupère cet argument pour copier/coller le fichier et donc créer les copies (il prends les noms pour les copies dans une liste chainé).

    Mais comme je peux utiliser en argument un nom de fichier qui ce trouve dans cette liste chainé, je pensais faire une condition pour qu'il ne fasse rien quand il arrive sur ce nom, genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    			if (argv[1] == MaPile->nomFichier) {
    				printf("\n\n__________________test\n\n");
    				MaPile = MaPile->prec;
    			}
    Mais je ne rentre pas dans la condition.

    Exemple, comme argument j'ai "toto" qui ce trouve donc dans MaPile->nomFichier "toto" : donc je ne fais rien.

    Je sais pas si je suis clair.

    Merci.

  6. #6
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (strcmp(argv[1], MaPile->nomFichier) ==0) ...

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

Discussions similaires

  1. boucle d'ouverture de fichier
    Par clojo dans le forum MATLAB
    Réponses: 2
    Dernier message: 14/02/2013, 06h11
  2. [Débutant] Boucle d'ouverture-engistrement fichier .bmp
    Par Alpine118 dans le forum Images
    Réponses: 2
    Dernier message: 20/04/2012, 12h10
  3. Ouverture de plusieurs fichiers en boucle
    Par Didi34 dans le forum Langage
    Réponses: 9
    Dernier message: 28/11/2008, 15h57
  4. Ouverture de fichier pendant une boucle d'attente
    Par nawake dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 15/09/2008, 19h03
  5. boucle d'ouverture de fichier excel
    Par rom05 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 16/04/2008, 14h59

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