Vérifier l'existence d'un fichier (sous windows(32/64) exclusivement !!! c'est pas portable sous d'autres os !!!)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 17 419 fois - Téléchargée 38 fois

Contenu du snippet

      • Spécifique à Windows(32/64 bits) ***


Petit bout de code pour vérifier l'existance d'un fichier, rien de bien compliqué ...

Source / Exemple :


#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <stdio.h>

//
// pour une version unicode
// changez simplement « char » par « wchar_t »
// et « GetFileAttributesA() » par « GetFileAttributesW() »
//
// vous pouvez aussi le faire à la Windows, deux fonctions
// int fileExistsA(const char* ...)
// int fileExistsW(const wchar_t* ...)
// et puis définir une macro fileExists sur fileExistsA ou fileExistsW
// en testant la macro UNICODE(si elle est définie alors W sinon A)
//
// ou encore y aller avec les TCHAR
// vous avez le choix ...
//
int fileExists(const char* fileName)
{
    return (0 <= (INT_PTR)GetFileAttributesA(fileName));
}

int main()
{

  printf("`c:\\autoexec.bat` existe?: %s\n", fileExists("c:\\autoexec.bat") ? "oui" : "non");
  return 0;

}

Conclusion :


En cas de problèmes ou autres, laissez moi un message!
Si vous voulez me niaiser en me disant que c'est pas portable alors passer votre chemin maintenant !

A voir également

Ajouter un commentaire Commentaires
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
si on devait faire une nouvelle fonction pour chaque extension, on aurais pas fini de coder...

on a déjà répondu à la question ici en détaillant différentes méthodes, leurs avantages & inconvénients.

Bonne prog à tous
et que vos voeux se réalisent pr cette nouvelle année.
Magicalement
Nono.
Messages postés
1
Date d'inscription
mardi 2 janvier 2007
Statut
Membre
Dernière intervention
2 janvier 2007

svp j'aimerais savoir comment verifier l'existance d'un fichier .txt en c++
Messages postés
402
Date d'inscription
mardi 1 mai 2001
Statut
Membre
Dernière intervention
15 août 2011

ca m'érite une mise à jour, merci pour la remarque
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
26
return (0 <= (INT_PTR) GetFileAttributes( fname ) );
évite les constantes ce qui permet portabilité vers x64.
Messages postés
402
Date d'inscription
mardi 1 mai 2001
Statut
Membre
Dernière intervention
15 août 2011

la raison que tu invoques est ridicule ... si on veut savoir si on peut ouvrir un fichier pour le lire on fait pas un « fileExists() » dessus, on l'ouvre en « mode lecture » et puis on test ensuite, mon exemple c'est simplement pour tester l'existance d'un fichier, pour savoir si le fichier X existe ou non, pas pour savoir si on peut le lire, écrire dedans, etc. d'où le nom de la fonction :: fileExists()

*** hors sujet ***

pour ton histoire de portabilité, c'est évident que d'utiliser des librairies déjà développés/testés/etc. ca aide beaucoup mais ca n'empêche pas qu'on puisse quand même ajouter du code spécifique à un OS quelconque, regardes les softs(portables) open source, il y en a beaucoup qui le font, ils ne se basent pas toujours sur des librairies telles que qt/gtk/wx/etc. pour développer leurs softs(fonctionnalités spécifiques, ...), ils ont aussi des parties spécifiques à des OS X, Y et Z ... alors oui, les librairies du genre à qt/gtk/wx/etc. sont utiles mais elles ne contiennent pas toujours tout ce qu'il faut pour développer nos applications(et là je parle pas d'une simple calculatrice hein ...), surtout quand on veut quelque chose de performant, ce genre de librairie n'est pas souvent adapté pour ca ...

c'est un peu comme les distro. linux, les builds x86 qui ne sont pas optimisés pour chaque PC(intel et compatible) mais c'est plutôt un build générique, les librairies telles que qt/... c'est pas mal la même chose ...

en passant, la portabilité d'un OS à un autre n'est pas une « obligation », loin de là, pour un développeur qui développe uniquement sous Windows(comme moi) par exemple, ca lui servirait à quoi? moi personnellement j'en vois pas l'interet et j'en ai pas besoin même si, oui oui, j'ai Linux sur deux de mes postes ...

*** hors sujet ***

il faudrait aussi penser à regarder le titre de l'exemple ... à moins d'avis contraires, j'ai bien mis « WIN » dans le titre, non? et on voit aussi « #include <windows.h> dans le code je crois, mais je suis pas certain, faudrait vérifier :-/
j'ai aussi mis « Linux » ou « Portable » ou autre dans le titre/code/... ??? quelqu'un pourrait confirmer s'il vous plait?

_
Afficher les 22 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.