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

 Delphi Discussion :

FindFirst, FindNext avec un nom de fichier incomplet


Sujet :

Delphi

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2013
    Messages : 10
    Points : 8
    Points
    8
    Par défaut FindFirst, FindNext avec un nom de fichier incomplet
    Boujour ! En recherchant un moyen d'ouvrir un fichier (exemple shellexecute) je me suis rendu compte qu'une partie du nom de mes fichiers générés était générés en fonction de la date et l'heure du fichier crée. Je me suis donc dis que d'autre personnes ont dût avoir un problème de ce type et je suis tomber sur quelques bouts de code contenant les fonctions "FindFirst et FindNext" mais il se trouve que mon problème ne s'applique pas à ce que j'ai pu trouver.

    Type 1:
    J'ai le début mais pas la fin : abcdefxxxx.txt
    Type 2:
    J'ai la fin mais pas le début : xxxxefghi.txt
    Mon type :
    J'ai le début et la fin mais pas le milieu : abcdxxxhijk.txt

    En sachant donc que pour mon cas les xxx est une date et heure (ex: 16092013(date) 1404(heure)) donc quelque chose que je ne contrôle pas quand je dois retrouver/ouvrir le fichier en question

    Y aurait t-il un moyen de passé outre le fais qu'il me manque cette partie du nom de fichier pour l'ouvrir ou faut-il que je creuse plus loin ?
    Merci de l'aide à venir

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Pour avoir utiliser FindFirst un grand nombre de fois, je n'ai jamais eu de problème d'énumération de fichier même dans des répertoires en contenant plus de 5000 (ouvrir cela dans l'explorateur, ça peine)

    Faudrait nous fournir ton code, à part, une troncature du nom de fichier lié peut-être à une mauvaise gestion de l'unicode, je ne connais pas perte de bout dans string !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 496
    Points : 2 762
    Points
    2 762
    Billets dans le blog
    10
    Par défaut
    Peut etre une surimpression d'objet

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2013
    Messages : 10
    Points : 8
    Points
    8
    Par défaut balise code
    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
    var
      searchResult : TSearchRec;
     
    begin
      // Try to find regular files matching Unit1.d* in the current dir
      if FindFirst('12100H302*', faAnyFile, searchResult) = 0 then
      begin
        repeat
          ShowMessage('File name = '+searchResult.Name);
        until FindNext(searchResult) <> 0;
     
        // Must free up resources used by these successful finds
        FindClose(searchResult);
      end;
    end;
    (adapté de : http://www.delphibasics.co.uk/RTL.asp?Name=FindFirst)

    Fichier de nom :
    12100H302 20121003 152100 tmp.txt
    12100H302 20121112 135700 pre.txt

    J'ai donc en ma possession 12100H302 et tmp.txt/pre.txt en sachant que je si je laisse 12100H302* il prendra le premier et le deuxième et j'aimerai accéder au deuxième par exemple.

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Points : 915
    Points
    915
    Par défaut
    Puisque vos fichiers semblent formatés toujours de la même façon,
    vous pouvez utiliser une recherche du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if FindFirst('12100H302?????????????????pre.txt', faAnyFile, searchResult) = 0 then
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    le problème c'est déjà le choix du répertoire
    Comme tu ne fournis que le nom du fichier, il doit chercher dans le répertoire de l'exe

    Et sinon, j'ai l'impression que tu as mal posé ta question, ce n'est pas un problème de chemin incomplet mais plutôt que tu ignores comment filtrer les résultat fournis par FindFirst

    Si tu veux accéder au "deuxième" seulement, tu as un critère de sélection
    construit ton fitre de façon à ce qu'il réduise ton choix, tente ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if FindFirst('12100H302 20121112*', faAnyFile, searchResult) = 0 then
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if FindFirst('"12100H302 20121112*"', faAnyFile, searchResult) = 0 then
    Tu noteras que j'ai mis "12100H302 20121112*" car je me demande si l'espace n'est pas problématique dans une recherche ?

    @Eric Boisvert, sous Explorer ? et * semble avoir le même effet et pas se limiter à un char
    Mais c'est une approche a tester
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  7. #7
    Membre émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 496
    Points : 2 762
    Points
    2 762
    Billets dans le blog
    10
    Par défaut
    Modifier le paramètre de FindFirst Comme suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    var
      searchResult : TSearchRec;
     
    begin
      if FindFirst('12100H302*.*', faAnyFile, searchResult) = 0 then
      begin
        repeat
          ShowMessage('File name = '+searchResult.Name);
        until FindNext(searchResult) <> 0;
        FindClose(searchResult);
      end;
    end;

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2013
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Je suis désolé de ne pas avoir donnée suite à ce sujet j'ai eu du travail par dessus la tête, je n'ai donc pas encore pu tester vos différentes solutions
    Je posterai à la suite de ce message pour vous dire si j'ai résolu mon problème, encore merci !

  9. #9
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Points : 915
    Points
    915
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    @Eric Boisvert, sous Explorer ? et * semble avoir le même effet et pas se limiter à un char
    Mais c'est une approche a tester
    C'est une approche testée depuis longtemps... depuis le DOS... et la fonction FindFirst réagit de la même façon !
    C'est testé ici dans mes versions (qui ne sont pas récentes...)
    mais j'ai de gros doutes que cela ait changé...
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

  10. #10
    Membre habitué

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2002
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2002
    Messages : 66
    Points : 191
    Points
    191
    Par défaut
    Bonjour,

    En général quand FindFirst ne me suffit pas, je charge les noms de fichier dans une TStringList et je continue à la main ou avec des expressions régulières...

Discussions similaires

  1. Constructor avec argument nom de fichier
    Par Jean_Benoit dans le forum C++
    Réponses: 5
    Dernier message: 29/09/2006, 13h34
  2. Ouvrir document mais nom du fichier incomplet
    Par ljiang dans le forum 4D
    Réponses: 1
    Dernier message: 22/09/2006, 14h04
  3. Créer une liste avec des noms de fichiers
    Par Jeffboj dans le forum Access
    Réponses: 5
    Dernier message: 12/05/2006, 05h48
  4. probleme avec un nom de fichier
    Par Ludo75 dans le forum C
    Réponses: 7
    Dernier message: 08/12/2005, 19h55
  5. [Debutant]Nom de fichiers incomplets
    Par Drizzt [Drone38] dans le forum MFC
    Réponses: 3
    Dernier message: 04/06/2004, 16h33

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