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 fichiers avec un nom en partie inconnu


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 31
    Par défaut Ouverture de fichiers avec un nom en partie inconnu
    Bonjour à tous,

    J'aimerai pouvoir ouvrir et lire le contenu de fichiers dont une partie du path est inconnu
    Je m'explique, je connais le chemin qui même aux fichiers

    /var/run/

    Je connais une partie du nom du fichier, ce qui me permet de les distinguer

    appli_*.pid -> * représente ce que je ne connais pas

    Et je connais le nombre max de fichiers possible 9
    Malheureusement * est une chaîne de caractère de moins de 10 caractères aléatoire

    Il est possible de faire quelque chose avec ça ? Je sèche

    Merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    A la première lecture, je dirais :
    Il faut lister les fichiers du répertoires (cf dirent.h & co).
    Faire une comparaison entre les éléments du listing et le fichier que tu cherches sur les n premiers caractères (strncmp).

  3. #3
    Membre Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 784
    Par défaut
    Hello,

    Tu peux retrouver tous les fichiers en utilisant les fonctions findfirst() et findnext(), incluses dans dir.h

    Voici un petit exemple avec tes données:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int done,found=0;
    struct ffblk f;
     
    done=findfirst("var\\run\\appli_*.pid",&f,FA_ARCH|FA_RDONLY);
    while(!done && !found) {
      if(stricmp(f.ff_name,MON_FICHIER)==0) found=1;
      else done=findnext(&f);
    }
    findclose(&f);
    La structure ffblk et les flags FA_xxx sont décrits dans dir.h
    findfirst() et findnext() renvoient 0 tant qu'il y un fichier qui correspond à tes critères.

    Amicalement,

    Edgar.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 31
    Par défaut
    Merci beaucoup pour vos réponses, j'aurai appris plein de trucs

    Seulement j'ai oublié une info importante je suis sous Linux et findfirst ne fonctionne que sous windows, il faut donc que je trouve l'équivalent

    Merci encore

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 31
    Par défaut
    Grâce à vos indications j'ai trouvé l'équivalent sous linux

    Le code suivant m'affiche la liste des fichiers

    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/types.h>
    #include <dirent.h>
    #include <errno.h>
     
    int main( void ) {
            DIR *currentDir,
                    *type;
            struct dirent *fichier;
     
            if( NULL == ( currentDir = opendir( "/var/run" ))) {
                    perror( "opendir()" );
            } else {
                    while( NULL != ( fichier = readdir( currentDir ))) {
                            printf( "%s", fichier->d_name );
                            printf( "\n" );
                            if( NULL == ( type = opendir( fichier->d_name ))) {
                            }
                            closedir( type );
                    }
                    if( errno != 22 ) {
                            perror( "readdir()" );
                    }
     
                    closedir( currentDir );
            }
     
            return 0;
    }
    Il ne reste plus qu'à faire un tri, effectivement peut-être avec strncmp

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 833
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 833
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par stealth Voir le message
    Grâce à vos indications j'ai trouvé l'équivalent sous linux

    Le code suivant m'affiche la liste des fichiers


    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/types.h>
    #include <dirent.h>
    #include <errno.h>

    int main( void ) {
    DIR *currentDir,
    *type;
    struct dirent *fichier;

    if( NULL == ( currentDir = opendir( "/var/run" ))) {
    perror( "opendir()" );
    } else {
    while( NULL != ( fichier = readdir( currentDir ))) {
    printf( "%s", fichier->d_name );
    printf( "\n" );
    if( NULL == ( type = opendir( fichier->d_name ))) {
    }
    closedir( type );
    }
    if( errno != 22 ) {
    perror( "readdir()" );
    }

    closedir( currentDir );
    }

    return 0;
    }

    Il ne reste plus qu'à faire un tri, effectivement peut-être avec strncmp


    Salut

    Pourquoi tu fais ce test errno avec 22 ???
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Membre émérite
    Avatar de Kirilenko
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 234
    Par défaut
    Pourquoi est-ce que tu essaies d'ouvrir ton fichier ligne 18 ?
    Récursivité en C : épidémie ou hérésie ?

    "Pour être un saint dans l'Église de l'Emacs, il faut vivre une vie pure. Il faut se passer de tout logiciel propriétaire. Heureusement, être célibataire n'est pas obligé. C'est donc bien mieux que les autres églises" - Richard Stallman

Discussions similaires

  1. Ouverture de fichier avec nom dans une autre langue
    Par bannik dans le forum Langage
    Réponses: 3
    Dernier message: 18/05/2015, 15h00
  2. Ouverture de fichier avec début de nom
    Par bbell dans le forum VBScript
    Réponses: 8
    Dernier message: 11/12/2012, 16h33
  3. Ouverture d'un fichier avec un nom variable
    Par setauh dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 11/09/2009, 07h19
  4. Ouverture d'un fichier avec son nom
    Par bonjour69 dans le forum C
    Réponses: 23
    Dernier message: 15/10/2005, 19h36
  5. Aide sur ouverture de fichier avec access
    Par FusionR dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 17/06/2004, 12h02

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