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 :

concaténation de fichiers d'un répertoire


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 16
    Points : 12
    Points
    12
    Par défaut concaténation de fichiers d'un répertoire
    Bonjour,
    voila, une partie de mon programme C doit concaténer des fichiers provenant de plusieurs répertoire.

    le hic, c'est que je dois automatiser cette concaténation sans connaitre le nom des fichiers ni leur nombre.
    Les seules choses que je connais, c'est les extensions des fichiers et les noms des répertoires.

    Merci m'aider.

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    sous quel os ?
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  3. #3
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    sous windows, je travaille avec devcpp.
    et en langage C

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    et bien tu te sers des fonctions opendir, readdir, pour explorer les répertoires, et puis strstr pour chercher les noms, ensuite la fonction system(), en lui passant cat comme commande...

    Fais ton algo, code, et après on t'aidera..

    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  5. #5
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    ok, merci.
    si j'ai des soucis je posterais mon code ...

  6. #6
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par souviron34
    <...>ensuite la fonction system(), en lui passant cat comme commande...
    cat sous Windows ? Pourquoi faire ?
    Pas de Wi-Fi à la maison : CPL

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    oops autant pour moi....

    Désolé je ne programme pas sous Windows.

    Effectivement, donc si on ne peut se servir ni de cat, ni de echo, il doit bien y avoir un équivalent , non ?

    Sinon il faut ouvrir le fichier 1, lui ajouter le fichier 2 à la main ?
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  8. #8
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    Je suis en stage dans une entreprise, et je doit traiter des fichier de rapport d'erreur provenant de cateurs d'un navire(les mettre en forme et lisible)

    Toutes les machine tournent sous Windows, je ne vais donc pas demander à avoir linux ...

    Chaque capteur à son répertoire et dans ce répertoire il y a plusieurs fichiers dont je ne connais pas les nom (ils dépendent de la mission du navire et de l'erreur)

    le truc, c'est que pour developper mon programme, on m'avait fourni des fichier déjà concaténé, on ne m'avait pas dit qu'ils étaient découpés en plusieur fichiers ... et on m'a annoncé que ça serais bien si mon programme concatène ces fichiers automatiquement et qu'il les traite dans un meme temps.

    mais comme ce sont des fichier d'erreur, je ne peux pas prévoir leurs nom ni leur nombre, je connais juste le nom des répertoires associés aux capteurs.

  9. #9
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    déjà la première partie (jusqu'à l'appel à system()) de ce que je t'ai dit est correcte quelle que soit ce que tu fais après, pour récupérer la liste des noms.

    Fais déjà ça, et on verra après.
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  10. #10
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par souviron34
    Effectivement, donc si on ne peut se servir ni de cat, ni de echo, il doit bien y avoir un équivalent , non ?
    Il y a type (idem cat) et echo.

    Sous DOS/Windows, pour concaténer des fichiers, on utilise copy avec +.

    copy srcA + srcB + srcC dest

    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
     
    Microsoft Windows XP [version 5.1.2600]
    (C) Copyright 1985-2001 Microsoft Corp.
     
    C:\>help copy
    Copie un ou plusieurs fichiers sur un autre emplacement.
     
    COPY [/D] [/V] [/N] [/Y | /-Y] [/Z] [/A | /B ] source [/A | /B]
         [+ source [/A | /B] [+ ...]] [cible [/A | /B]]
     
      source       Fichier(s) à copier.
      /A           Indique un fichier texte ASCII.
      /B           Indique un fichier binaire.
      /D           Permet au fichier cible d'être créé sans être codé
      cible        Répertoire et/ou nom de fichier cible.
      /V           Vérifie l'écriture du ou des fichiers cible.
      /N           Utilise un nom de fichier court, s'il est disponible, lors de
                   la copie d'un fichier ayant un nom supérieur à 8.3 caract.
      /Y           Supprime la confirmation de remplacement d'un fichier
                   cible existant.
      /-Y          Demande une confirmation pour remplacer un fichier cible
                   existant.
      /Z           Copie les fichiers réseau en mode redémarrage.
     
    L'option /Y peut être prédéfinie dans la variable d'environnement COPYCMD.
    Il est possible d'annuler cela avec l'option /-Y de la ligne de commande. Par
    défaut, l'utilisateur est invité à confirmer le remplacement à moins que la
    commande COPY ne soit exécutée à partir d'un fichier de commandes.
    Appuyez sur une touche pour continuer...
    Pas de Wi-Fi à la maison : CPL

  11. #11
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    j'ai trouvé un prog qui fait un peu ce que je veux, mais il y a beaucoup de fonctions, types que je ne connais pas...

    quelqu'un pourrait me dire comment le modifier pour l'adapter à mon besoin ou le commenter ?
    j'ai franchement du mal a savoir comment il fonctionne, je n'ai pas l'habitude de cette façon de programmer (on apprend pas à faire comme ça à l'école )

    je ne connais pas ces librairie :
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <unistd.h>
    #include <dirent.h>
    #include <errno.h>
    si quelqu'un pouvais me dire a quoi elles servent, ça serais simpas.

    PS : pour éviter les problème de compilation, j'ai casté les malloc, et ça marche.

  12. #12
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Ce ne sont pas des "librairies" (Library = Bibliothèque), mais des fichiers d'en-tête.

    Ces fichiers déclarent des fonctions de l'API système des plate-formes unixoïdes (Linux, etc.), donc si tu cherches à faire tourner ça sous Windows t'es pas arrivé...

    (tu n'y arrivera sans doute pas sans la couche de compatibilité Cygwin)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  13. #13
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    pourtant je l'ai exécuté et il a fonctionné ...
    j'ai créé un fichier MP3
    j'y ai créé des fichiers texte, juste pour tester
    et ajouté une ligne dans le code pour m'afficher les nom des fichiers

    et j'ai vu tout les fichiers de ce répertoire quand j'ai lancé le code...

  14. #14
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Médinoc
    Ce ne sont pas des "librairies" (Library = Bibliothèque), mais des fichiers d'en-tête.

    Ces fichiers déclarent des fonctions de l'API système des plate-formes unixoïdes (Linux, etc.), donc si tu cherches à faire tourner ça sous Windows t'es pas arrivé...

    (tu n'y arrivera sans doute pas sans la couche de compatibilité Cygwin)
    oui je pense que mingw possède ces fichiers-là..
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  15. #15
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Et pourquoi pas avec fopen, fgets et compagnie ?
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  16. #16
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    bah, pour utiliser ces fonction, ont doit connaitre les noms des fichiers .... non ?

    mon problème, c'est surtout de naviguer dans les répertoires (dont je connais les noms et place) et de concaténer tout les fichiers qui se trouvent dans ces répertoire.

    la concatènation en elle-même, je sais faire, mais le reste, j'ai plus de mal ...

  17. #17
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par Lumberjack
    bah, pour utiliser ces fonction, ont doit connaitre les noms des fichiers .... non ?

    mon problème, c'est surtout de naviguer dans les répertoires (dont je connais les noms et place) et de concaténer tout les fichiers qui se trouvent dans ces répertoire.

    la concatènation en elle-même, je sais faire, mais le reste, j'ai plus de mal ...
    opendir et readdir
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  18. #18
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    opendir(), readdir() et closedir() : Fonctions POSIX non-disponibles sous Windows, mais fournies par MinGW en tant qu'extension.
    FindFirstFile(), FindNextFile() et FindClose() : Fonctions Windows, non-disponibles sur les autres systèmes.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  19. #19
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    oui je signale que je l'avais donné au PO au post #4..

    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  20. #20
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Lumberjack
    j'ai trouvé un prog qui fait un peu ce que je veux, mais il y a beaucoup de fonctions, types que je ne connais pas...

    quelqu'un pourrait me dire comment le modifier pour l'adapter à mon besoin ou le commenter ?
    j'ai franchement du mal a savoir comment il fonctionne, je n'ai pas l'habitude de cette façon de programmer (on apprend pas à faire comme ça à l'école )
    C'est pourtant du bon code.
    je ne connais pas ces librairie :
    Ce ne sont ni de libraries ni des bibliothèques, mais des fichiers d'entêtes... Les bases du C ne sont pas maitrisées. Caÿmal...

    #include <sys/types.h>
    #include <sys/stat.h>
    #include <unistd.h>
    #include <dirent.h>
    #include <errno.h>
    si quelqu'un pouvais me dire a quoi elles servent, ça serais simpas.
    A ce que ton code soit compilable. Il manque aussi

    qui remplace avantageusement les 3 lignes de prototypes du début du code.

    En fait tu n'a besoin que de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    /* POSIX.1 */
    #include <dir.h>
    #include <dirent.h>
    #include <sys/stat.h>
     
    /* standard C */
    #include <errno.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    Les trois premiers entêtes permettent d'utiliser les fonctions POSIX.1
    opendir(), readdir(), fstat(), chdir() etc.

    Les autres sont standards. <errno.h> Permet d'accéder à la variable globale du C 'errno' (numéro de la dernière erreur d'une fonction de la bibliothèque) et aux constantes qui définissent ces erreurs (comme ERANGE : dépassement de capacité).
    PS : pour éviter les problème de compilation, j'ai casté les malloc, et ça marche.
    Il faut cesser de coder au hasard. Tu n'as pas besoin de ça.

    Par contre, tu devrais vérifier que tu compiles bien en C en non en C++
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #ifdef __cplusplus
    #error This source file is not C++ but rather C. Please use a C-compiler
    #endif
    Pas de Wi-Fi à la maison : CPL

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

Discussions similaires

  1. [debutant] concaténation de fichiers
    Par Spyco dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 13/07/2005, 10h52
  2. Réponses: 2
    Dernier message: 26/07/2004, 13h34
  3. Réponses: 4
    Dernier message: 22/12/2003, 11h12
  4. liste des fichiers d'un répertoire
    Par am dans le forum C
    Réponses: 3
    Dernier message: 04/08/2003, 17h03
  5. [Kylix] Liste des fichiers d'un répertoire
    Par Houben Jacques dans le forum EDI
    Réponses: 3
    Dernier message: 30/11/2002, 21h14

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