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 : 51
    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 : 51
    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