Vérifier la présence d'un fichier

gilds5 Messages postés 19 Date d'inscription jeudi 16 mars 2006 Statut Membre Dernière intervention 13 juin 2006 - 30 mai 2006 à 15:47
yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 - 3 juin 2006 à 09:24
Bonjour  à tous
J'ai trouvé quelques réponses pour le même genre de sujet, mais comme je débute à mort, je n'ai rien trouvé que puisse comprendre...
Donc voici mon problème, qui devrait parraitre relativement ridicule pour ceux qui savent faire:
j'ai un dossier dans lequel on m'envoie de temps en temps un fichier texte, et je voudrais donc lancer une action lorsque le fichier est déposé (sachant qu'une fois le bordel effectué, je vide tout le dossier).
quelque chose du genre
if (fichier.txt détecté)
   {
     tout plein de trucs...
     vider le dossier
   }
   
   j'ai vu qu'avec find first file ou quelque chose de ce genre c'était possible, mais j'ai pas trop compris. Si un personnage éclairé pouvait m'expliquer comment on utilise ce truc, ou toute autre solution, je suis preneur!!!!

Merci d'avance!

36 réponses

yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 3
30 mai 2006 à 16:49
Salut gilds5,
voilà ce que tu cherches :
/*Existence ou non du fichier*/
bool FichExist(char * Chemin)
{
    WIN32_FIND_DATA WFD;
    HANDLE hWnd = FindFirstFile(Chemin, &WFD);
    if(hWnd == INVALID_HANDLE_VALUE)
    {
        FindClose(hWnd);
        return false;
    }
    FindClose(hWnd);
    return true;
}

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
0
excrt Messages postés 75 Date d'inscription mercredi 5 avril 2006 Statut Membre Dernière intervention 3 juillet 2006
30 mai 2006 à 16:58
pour vérifier l'existance d'un fichier, utilises GetFileAttributes()

#include <windows.h>

//- ...

if (GetFileAttributes("chemin d'accès complet du fichier ici") != INVALID_FILE_ATTRIBUTES)
{
  //- le fichier existe
}
else
{
  //- le fichier n'existe pas
}

pour effectuer une petite recherche, c'est presque aussi simple

HANDLE find; //- handle de recherche(identificateur unique)
WIN32_FIND_DATA wfd; //- va contenir les infos de chaque fichier/dossier trouvés

  //- débute la recherche en indiquant dans quel répertoire débuter la recherche
  //- *.* >> pour nous retourner tout ce qu'il trouve
  //- *.exe >> pour nous retourner seulement les fichiers avec l'extension .exe
  //- ...
  find = FindFirstFile("c:\\*.*", &wfd);

  //- vérifie qu'il n'y a pas d'erreur
  if (find != INVALID_HANDLE_VALUE)
  {
    do
    {
      //- est-ce un répertoire/dossier?
      if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
      {
        //- c'est un dossier >>  wfd.cFileName contient le nom du dossier trouvé

        //- vérifie que ce n'est pas le dossier courant ou précédent
        if (strcmp(wfd.cFileName, ".") != 0 && strcmp(wfd.cFileName, "..") != 0)
        {
          //- c'est okay ...
          printf("dossier: %s\n", wfd.cFileName);
        }
      }
      else
      {
        //- c'est un fichier >>  wfd.cFileName contient le nom du fichier trouvé
        printf("fichier: %s\n", wfd.cFileName);
      }
    }
    while (FindNextFile(find, &wfd) != FALSE); //- tant qu'il trouve des fichiers/dossiers

    FindClose(find); //- détruit le handle/libère les ressources
  }
  else
  {
    //- erreur
  }

-=-= ExCRT =-=-
0
excrt Messages postés 75 Date d'inscription mercredi 5 avril 2006 Statut Membre Dernière intervention 3 juillet 2006
30 mai 2006 à 17:01
Yo yoyo269, GetFileAttributes() est beaucoup plus performant et simple à utiliser pour vérifier l'existance d'un fichier ou d'un dossier !

-=-= ExCRT =-=-
0
yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 3
30 mai 2006 à 17:26
Peut-être mais comme le code n'est pas de moi mais de BruNews (si je ne me trompe pas), je lui fais entièrement confiance.

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
excrt Messages postés 75 Date d'inscription mercredi 5 avril 2006 Statut Membre Dernière intervention 3 juillet 2006
30 mai 2006 à 18:24
Un mot >>> _Ridicule_

-=-= ExCRT =-=-
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 12
30 mai 2006 à 18:48
Oui, d'autant ce que code n'est sans doute pas de BruNews (je me souviens d'un msg ou il utilise GetFileAttributes)
0
yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 3
30 mai 2006 à 20:14
Je vois pas en quoi c'est ridicule de prendre exemple sur qq'un qui est d'un niveau sûr.

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 12
30 mai 2006 à 20:17
Ce qui est ridicule c'est la manière dont tu as nié ce qu'a dit excrt.
C'est sur qu'on a tous besoin de prendre exemple sur quelqu'un, mais ca
ne dispense pas d'avoir un point de vue critique sur l'exemple
0
yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 3
30 mai 2006 à 20:22
J'ai pas nié du tout !!! Peut-être = nié pour toi ?
Pour moi ça veut dire que je ne sais pas si c'est mieux donc pas d'avis.
En tous cas, gilds5 a ce qu'il lui faut, c'est l'essentiel.

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
30 mai 2006 à 20:40
Ya aussi ca en C++:


std::ifstream file(path);

if (file)

{

// alors le fichier existe ou en tout cas a pu etre ouvert.

}
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 12
30 mai 2006 à 20:42
Justement, pas terrible car un fichier ouvert en mode exclusif ne peut pas être réouvert par exemple, alors qu'il existe bien
0
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 20
30 mai 2006 à 21:14
C'est certain, faut être critique sur tout et tous sans restriction.
FindClose() sur un retour de handle invalide ??? j'aurais du être bourré ce jour là mais comme je ne bois pas...

if(0 > (long)GetFileAttributes(szfile)) ABSENT

ciao...
BruNews, MVP VC++
0
gilds5 Messages postés 19 Date d'inscription jeudi 16 mars 2006 Statut Membre Dernière intervention 13 juin 2006
31 mai 2006 à 09:21
Merci a vous tous les gens pour toutes réponses.
Je vais voir ce que j'arrive à faire avec tout ça...
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
31 mai 2006 à 14:12
Pourquoi cette écriture inversée de l'inégalité ?
Enfin inversée...
Pourquoir pas ((long)GetFileAttributes(szFile) < 0) ???
if(!Meilleur("Joky")) return ERREUR;<
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 12
31 mai 2006 à 14:20
Voici comment j'aurais fait, ca me semble plus clair ainsi:
if(atan((double)(long)GetFileAttributes(szfile)) < cos(PI/2))
0
yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 3
31 mai 2006 à 14:25
Très drôle comme réponse. Franchement se moquer comme ça c'est pas très malin je trouve.
D'autant plus que la question n'est pas spécialement stupide car ça pourrait (pourquoi pas) rendre le test plus rapide.

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 12
31 mai 2006 à 14:32
Je vois pas trop comment ca pourrait accélérer le test, tu peux expliquer?
0
yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 3
31 mai 2006 à 14:53
Attention, je n'ai pas dit que ça accélère. J'ai dit ça comme un exemple de ce que cette écriture pourrait faire.
Moi aussi je me demandais pourquoi BruNews l'avait écrit de cette manière.
Mais c'est peut-être tout simplement une habitude de programmation.

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 12
31 mai 2006 à 15:10
Oui mais enfin c'est évident que les deux écritures sont équivalentes
0
yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 3
31 mai 2006 à 15:15
Qu'elles font la même chose c'est certain. Mais qq chose aurait peut-être pu être différent.
Tiens un autre petit exemple, dont je ne sais pas la réponse :

int a, b;a b 1;

ou

int a, b;
a = 1;
b = 1;

ou
int  a 1, b 1;

Il est clair qu'ils font tous la même chose, mais est-ce que le résultat mets le même temps dans chaque cas ?

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
0