Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

ouvrir un fichier dont quelques lettres du nom changent



  1. #1
    lil-vince

    ouvrir un fichier dont quelques lettres du nom changent


    ------

    Bonjour,

    j´utilise en C la fonction:

    Code:
    HANDLE hFile = CreateFile(argv[argv_filename], FILE_READ_DATA, 0, NULL, OPEN_EXISTING, 0, 0);
    avec argv[argv_filename] qui contient le nom du fichier à lire.

    Je souhaite faire un programme en console qui travail sans ligne de commandes (double clic sur l´exécutif) mais qui puisse ouvrir des fichiers avec des noms différents.

    Le(s) fichier(s) se trouvera dans le même dossier que l´exe. et seule la version changerait, par exemple:

    -firmware XXX v1_0.bin
    -firmware XXX v1_1.bin
    -etc...

    Donc lui dire d´ouvrir les fichiers dont la structure du nom est "firmware XXX v?_?.bin" sans se soucier des chiffres à la place des '?'
    Est ce possible?

    De préférence, si cela est possible, j´aimerais pouvoir sélectionner la version la plus récente si le dossier contient plusieurs versions.

    Merci d´avance

    -----
    Dernière modification par lil-vince ; 31/08/2009 à 14h47.
    Si on a 2 oreilles et 1 bouche, c'est pour écouter 2 fois plus qu'on ne parle. Confucius

  2. #2
    gienas
    Modérateur

    Re : ouvrir un fichier dont quelques lettres du nom changent

    Bonjour lil-vince et tout le groupe

    Citation Envoyé par lil-vince Voir le message
    ... Est ce possible? ...
    J'ai bien peur que non.

    Les fonctions d'OS (DOS par exemple), "savent" lister, effacer, ... des fichiers dont les noms comportent des jokers, mais il n'est pas possible d'ouvrir plusieurs fichiers à la fois, sans les nommer explicitement.

    Dans ton cas, ce serait possible, mais en créant une boucle qui tente d'ouvrir les X fichiers que le joker permet. Chaque fichier ouvert devra avoir son propre handler, pour faire les opérations que tu voudras faire sur le contenu des fichiers ouverts. Ne seront ouverts effectivement, que les fichiers pour lesquels l'opération d'ouverture aura réussi. Mais là, je ne t'apprends rien.

    Edit: après relecture, je note que tu ne veux n ouvrir qu'un à la fois, mais le "dernier" s'il y en a plusieurs.

    Dans ce cas, si ton numéro de version est croissant, ce qui est logique, tu peux organiser ta boucle de tests, pour commencer ta substitution de jokers par le haut, et sortir de cette boucle, dès que tu as réussi.

    .
    Dernière modification par gienas ; 31/08/2009 à 15h03.

  3. #3
    lil-vince

    Re : ouvrir un fichier dont quelques lettres du nom changent

    Salut,

    Merci de ta réponse. Si je comprend bien, la seule façon d´ouvrir la version la plus récente du fichier est une boucle du style:

    Code:
    for (version = MAX_nb_version; hFile == INVALID_HANDLE_VALUE && version > 0 ; version--)
    {
         hFile = CreateFile(argv[argv_filename + version], FILE_READ_DATA, 0, NULL, OPEN_EXISTING, 0, 0);
    
    }
    En ayant bien sûr entré toutes les possibilités de versions différentes dans argv[]...

    Ce qui m´embête c´est que je ne sait pas combien il pourra y avoir de versions. Mais si c´est la seule solution...

    Merci
    Si on a 2 oreilles et 1 bouche, c'est pour écouter 2 fois plus qu'on ne parle. Confucius

  4. #4
    gienas
    Modérateur

    Re : ouvrir un fichier dont quelques lettres du nom changent

    Citation Envoyé par lil-vince Voir le message
    ... argv_filename + version ...
    Là, je suis à peu près sûr que cela ne convient pas. Ou plutôt, ce n'est pas ce que j'ai compris de ton problème.

    Là, version semble être un entier. Or, j'avais compris que que ? remplaçait un caractère ASCII valide pour un nom de fichier. Je pense qu'il faut concaténer et non pas ajouter.

    Par ailleurs, dans ton exemple, le joker est interne au filename. Tu y ajoutes le point et l'extension.

    Il me semble qu'il faut traiter le nom principal du fichier, concaténer le joker, que tu peux prévoir sur un ou deux caractères, puis y ajouter l'extension, qui sera une constante ou que tu entres comme donnée argv[]. Là, c'est toi qui décides.

    Si la version est un nombre (ou un chiffre) compris entre X et 0, il faut convertir ce nombre en ASCII pour la concaténation.

  5. A voir en vidéo sur Futura
  6. #5
    lil-vince

    Re : ouvrir un fichier dont quelques lettres du nom changent

    Moi aussi j´ai du mal comprendre ta premiere réponse.
    J´essaye de réexpliquer ce que je veux faire:

    J´ai un client à qui j´envoi un executif et je lui enverrai par la suite des versions différentes du fichier "firmware toto.bin" qui auront donc des appelations:
    -firmware toto v1_0.bin
    -firmware toto v1_1.bin
    etc... au fur et à mesure des modifications du firmware (qui seront téléchargées dans un µC).

    Ce que je voudrait, c´est que notre client n´ait qu´à mettre le fichier "firmware toto v1_0.bin" (ou "firmware toto v1_1.bin", etc...) dans le même dossier que l´exe et double cliquer sur l´exe (et l´exe téléchargera le fichier.bin dans l´µC).

    Donc le nom du fichier est "intégré" á l´exe.

    Par exemple, pour l´instant dans mon .exe j´ai mit :
    Code:
    hFile = CreateFile("firmware toto v1_0.bin", FILE_READ_DATA, 0, NULL, OPEN_EXISTING, 0, 0);
    Seulement, quand je lui enverrai le fichier "firmware toto v1_1.bin", le programme ne le lira pas puisqu´il cherche un fichier qui s´appel: "firmware toto v1_0.bin".

    Si j´ai bien compris, on ne peut pas lui dire de "ne pas regarder" les numéros de versions.

    Aurais tu un lien sur l´utilisation des jokers pour ce genre d´application car je connai pour la fonction printf() mais pas pour CreateFile(); ?
    Si on a 2 oreilles et 1 bouche, c'est pour écouter 2 fois plus qu'on ne parle. Confucius

  7. #6
    lil-vince

    Re : ouvrir un fichier dont quelques lettres du nom changent

    Pour mon exemple message#3, c´est que je considerai que j´avais mis auparavant:

    (argv est un tableau de chaine de caracteres)

    argv[argv_filename] = "firmware toto v1_0.bin"
    argv[argv_filename+1] = "firmware toto v1_1.bin"
    argv[argv_filename+2] = "firmware toto v1_2.bin"
    etc...

    Donc que la boucle while test tous les noms de fichiers possibles; ça devrait fonctionner mais ça n´est pas ce que je préfererai car je ne sait pas combien il y aura de versions...
    Si on a 2 oreilles et 1 bouche, c'est pour écouter 2 fois plus qu'on ne parle. Confucius

  8. #7
    gienas
    Modérateur

    Re : ouvrir un fichier dont quelques lettres du nom changent

    Citation Envoyé par lil-vince Voir le message
    ... Donc que la boucle while test tous les noms de fichiers possibles; ça devrait fonctionner mais ça n´est pas ce que je préfererai car je ne sait pas combien il y aura de versions...
    Pourtant, c'est bien à toi de faire ce choix. Je pensais 9 au départ (un caractère). Après, si c'est plus, tu sautes à 99. C'est déjà pas mal. Si c'est pas assez, tu passes à 999. Mais c'est maintenant que tu dois choisir.

    Pour 9, c'était plus facile de taper les les possibilités en hard. Pour 99, il faut faire une conversion concaténée, et a fortiori pour 999.

  9. #8
    Towl

    Re : ouvrir un fichier dont quelques lettres du nom changent

    Euh pourquoi ne pas tout betement lister tous les fichiers du répertoire (FindFirstFile et FindNextFile) ? ensuite, il suffit de voir les noms de fichiers et s'amuser à trouver la meilleure version
    The only limiting factor of the Linux operating system, is his user. - Linus Torvalds

  10. #9
    lil-vince

    Re : ouvrir un fichier dont quelques lettres du nom changent

    Pour 9, c'était plus facile de taper les les possibilités en hard. Pour 99, il faut faire une conversion concaténée, et a fortiori pour 999.
    Ok, j´avais donc bien compris... (jsute pour info, je vais faire de v0_00 à v9_99 car il y aura très probablement de nombreuses versions car beaucoup d´utilisation/utilisateur différents, comme ça, ça me fait 99 versions avec chacunes 9 révisions possibles)

    Euh pourquoi ne pas tout betement lister tous les fichiers du répertoire (FindFirstFile et FindNextFile) ? ensuite, il suffit de voir les noms de fichiers et s'amuser à trouver la meilleure version
    C´est effectivement une bonne idée aussi...

    Merci à tous les deux...
    Si on a 2 oreilles et 1 bouche, c'est pour écouter 2 fois plus qu'on ne parle. Confucius

Discussions similaires

  1. Plante offerte dont je ne retrouve plus le nom...
    Par lilou250 dans le forum Identification des espèces animales ou végétales
    Réponses: 2
    Dernier message: 15/01/2009, 22h25
  2. ouvrir un fichier rar
    Par LOLO44 dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 11/07/2006, 16h20
  3. raccourci vers programme dont le nom change chaque jour
    Par Vincent.H dans le forum Logiciel - Software - Open Source
    Réponses: 5
    Dernier message: 05/10/2004, 11h05
  4. nom de fichier et nom de fichier.doc
    Par Cornemuse dans le forum Logiciel - Software - Open Source
    Réponses: 6
    Dernier message: 18/02/2004, 17h49
  5. [Divers] Une protéine dont la fonction et le nom m'ont échappé...
    Par chafouin dans le forum Biologie
    Réponses: 4
    Dernier message: 28/08/2003, 16h41
Découvrez nos comparatifs produits sur l'informatique et les technologies.