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++Builder Discussion :

Detection de fichier


Sujet :

C++Builder

  1. #1
    Invité
    Invité(e)
    Par défaut Detection de fichier
    Salut tout le monde,

    Voila j'utilise FindFirtsFile pour scruter un dossier et voici mon probleme,
    je souhaiterais qu'il ne détecte QUE les fichiers et ces fichiers sont sans extensions d'où mon problème.
    Sachant que je ne peut pas rajouter une extension ( demande venant d'en haut) me rendant toute détection par extension strictement impossible.

    Quelqu'un pourrait-il éclairer ma lanterne?

    Merci d'avance
    Dernière modification par Invité ; 17/12/2009 à 11h10.

  2. #2
    Membre Expert
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Par défaut
    Pour scruter un répértoire, tu peux utiliser TSearchRec, FindFirst et FindNext. Un exemple d'utilisation ici.

    Tu pourra vérifier si l'élément trouvé est un fichier ou un dossier avec l'attribut Attr de TSearchRec.

  3. #3
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Normalement, sous Windows, "pas d'extension" est équivalent à l'extension "." (ce qui est totalement faux sous Unix). Donc, le filtre correspondant à "tous les fichiers sans extensions" est "*.".
    Essaie, pour voir si ça résout ton problème. Sinon, il faudra détailler un peu plus le souci.

    EDIT : Plus GetFileAttributes pour distinguer les fichiers des répertoires, au fait...
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  4. #4
    Invité
    Invité(e)
    Par défaut
    j'essaie sa en début d'après midi et je vous tien au courant.
    Je vais lutter contre la neige.
    bonne appétit

  5. #5
    Invité
    Invité(e)
    Par défaut
    Je suis en recherche de documentation sur TSerachRec( Google n'as pas était mon ami ce coup-ci) et surtout sur l'argument attr que je n'arrive pas a utiliser serait-il abusé de te demander si tu a un exemple sous la ma main a me mettre sous la dent?

    Merci


    PS: j'ai essayer le (*.) et il détecte toujours les dossiers.

  6. #6
    Membre Expert
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
      AnsiString path = "C:\\NomRepertoire\\" ;
      TSearchRec sr;
      if (!FindFirst(  path + "*", faAnyFile, sr))
      do
      {
        if( (sr.Attr & faDirectory) > 0) // test si il s'agit d'un répertoire
          ShowMessage( sr.Name + " est un répertoire" ) ;
        else
          ShowMessage( sr.Name + " est un fichier" ) ;
      }
      while(!FindNext(sr));
      FindClose(sr);
    A noter: Comme dans tout répertoire sous windows, tu trouvera les dossiers "." (répertoire courant) et ".." (répertoire parent) qui sont invisible depuis l'explorateur windows.

    .

  7. #7
    Invité
    Invité(e)
    Par défaut
    Merci pour ce bout de code je vais exploiter sa de suite et donner le résultat

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bon ba je n'arrive pas à exploiter ce que tu m'as donner voici mon 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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    void fonction::Cherch_Fic_Rep(AnsiString nom, AnsiString rep, TStrings * ListeFichiers,AnsiString nb )
    {
      AnsiString ext1;
      AnsiString ext2;
      AnsiString ext3;
      rep= rep + "\\";
      sous_repertoire = "";
      fichier = "";
            TSearchRec sr;
     
      HANDLE hfind;
      WIN32_FIND_DATA wfd;
      hfind= FindFirstFile ((rep+"*.*").c_str(), &wfd );      // pour aller dans le repertoire  demander
     
      if ( hfind != INVALID_HANDLE_VALUE )
      {
        do
        {
          // vérifie que ce n'est pas le répertoire racine
          if( wfd.cFileName[0] != '.')
          {  
              // fichier
            fichier = rep + wfd.cFileName;
            if (!FindFirst(rep+"*.*",faAnyFile,sr))
            {
              if((sr.Attr & faDirectory) > 0)
              {
              }
              else
              {
                Lecture_Ini_Extension(&ext1,&ext2,&ext3, nb);
                TStringList *Extensions = new TStringList;
                Extensions->Add(ext1);
                Extensions->Add(ext2);
                Extensions->Add(ext3);
                Search(nom,rep, Extensions, ListeFichiers, fichier, file,nb);
                delete Extensions;
                ListeFichiers-> Add(FindNextFile( hfind, &wfd));
              }
            }
          }
          // }
        }while(FindNextFile( hfind, &wfd)); // suite de la recherche     /*
     
        // recherche terminé
        FindClose(hfind);
     
      }
    }
    vois-tu une erreur ou quelque chose qui l'empêcherai de fonctionner?

  9. #9
    Membre Expert
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Par défaut
    Je n'ai pour ma part jamais utiliser FindFirstFile (que je ne connais pas), j'utilise toujours FindFirst. Je pense qu'il faut utiliser soit l'un soit l'autre, mais pas les deux en même temps.

    Je n'ai pas étudier ton code en détail, qu'est ce qui ne fonctionne pas exactement?

  10. #10
    Invité
    Invité(e)
    Par défaut
    ce qui ne fonctionne pas est la le fait de différencier les dossier et fichiers donc je pense que le probléme vient a partir de :
    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
     
    if (FindFirst(rep+"*.*",faAnyFile,sr))
            {
              if((sr.Attr & faDirectory) > 0)
              {
              }
              else
              {
                Lecture_Ini_Extension(&ext1,&ext2,&ext3, nb);
                TStringList *Extensions = new TStringList;
                Extensions->Add(ext1);
                Extensions->Add(ext2);
                Extensions->Add(ext3);
                Search(nom,rep, Extensions, ListeFichiers, fichier, file,nb);
                delete Extensions;
                ListeFichiers-> Add(FindNextFile( hfind, &wfd));
              }
            }
    car avant mon code fonctionnait, il détectait tout mais maintenant il ne détecte plus rien. Je vais me renseigner pour les différences entrent FindFirst et FindFirstFile.

    Merci pour ton aide

  11. #11
    Membre Expert
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Par défaut
    La solution que je proposait était d'utiliser FindFirst en remplacement de FindFirstFile (qui a mon avis doivent être équivalente, peut être même que l'une utilise l'autre).
    Utilise soit l'un soit l'autre.

    En utilisant l'aide (F1), tu remarquera que la structure WIN32_FIND_DATA utilisée par FindFirstFile contient un paramètre dwFileAttributes qui devrait répondre à tes attentes.

    Extrait de l'aide:
    dwFileAttributes
    Specifies the file attributes of the file found. This member can be one or more of the following values:

    Value Meaning
    FILE_ATTRIBUTE_ARCHIVE
    The file is an archive file. Applications use this value to mark files for backup or removal.
    FILE_ATTRIBUTE_COMPRESSED
    The file or directory is compressed. For a file, this means that all of the data in the file is compressed. For a directory, this means that compression is the default for newly created files and subdirectories.
    FILE_ATTRIBUTE_DIRECTORY
    The file is a directory.

    [...]
    Donc en résumé, soit tu utilise soit FindFirst, soit FindFirstFile, tu arrivera au résultat souhaité. Je te conseillerais d'utiliser FindFirst, mais ce n'est pas très objectif étant donné que je ne connais pas l'autre.

  12. #12
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    A propos, c'est "*." (étoile - point), et non pas "*.*" (étoile - point - étoile) pour ton filtre... Tu remonteras toujours les répertoires, mais le but est de les filtrer via les champs de recherche OU la fonction GetFileAttributes.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  13. #13
    Invité
    Invité(e)
    Par défaut
    j'ai remplacé FindFirstFile par FinfFile, et tout fonctionne parfaitement.
    Merci de vous être pencher sur mon problème.

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

Discussions similaires

  1. XP PRO SP2 detection de fichiers volumineux
    Par HOFER dans le forum Windows XP
    Réponses: 3
    Dernier message: 14/08/2006, 12h47
  2. Réponses: 8
    Dernier message: 03/07/2006, 19h52
  3. detection de Fichier ouvert
    Par Invité dans le forum Entrée/Sortie
    Réponses: 10
    Dernier message: 29/05/2006, 09h07
  4. [langage]detection fin fichier
    Par thanatos29 dans le forum Langage
    Réponses: 3
    Dernier message: 03/06/2005, 20h47
  5. [langage] [Fork] Détecter un fichier
    Par GLDavid dans le forum Langage
    Réponses: 11
    Dernier message: 08/07/2004, 01h05

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