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

Windows Discussion :

[Débutant] C++ : Ouvrir un fichier


Sujet :

Windows

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 112
    Points : 44
    Points
    44
    Par défaut [Débutant] C++ : Ouvrir un fichier
    Bonjour,



    J'ai lu le tutoriel de Bob mais ça manque beaucoup trop de précision pour moi, peut-être aussi que ça vient du fait que certaines fonctions ne se gèrent pas pareil entre Dev-Cpp que j'utilise et MSV, j'en sais rien pour l'instant.



    Je sais ouvrir en C++ et mode console un fichier en lecture avec :


    La déclaration ifstream leFichier;

    L'accès : leFichier.open (chemin, ios::binary);

    La vérif d'existence : if (leFichier.is_open()) {}

    Et pour le sortir de la mémoire : leFichier.close();


    C'est tellement simple que c'est à ma portée.


    Mais je ne vois pas du tout les équivalents windows de ces commandes.

    Je cherche alors quelqu'un libre de me répondre (avec exemple si possible) comment faire la même chose avec l'API Windows...

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Eh bien:
    • tu peux toujours utiliser les mêmes classes C++ pour ouvrir un fichier sous Windows, puisque MinGW et Visual 2005 respectent tous deux le standard C++.
    • Au niveau en-dessous (pour la version Microsoft de fstream), il y a les fonctions standard C : fopen(), etc.
    • Au niveau encore en-dessous, il y a les fonctions bas niveau C : _open(), etc. Ces fonctions ressemblent aux fonctions POSIX, mais _open() est différente notamment, à cause des droits.
    • Et au niveau en-dessous, il y a l'API Windows, et sa fonction CreateFile().
    • Quant au niveau le plus bas, c'est l'API native, et sa fonction NtCreateFile().

    Mais si tu veux une version "orientée objet" de la gestion de fichiers sous Windows, tu peux utiliser la classe CFile de la bibliothèque (payante) Microsoft Foundation Classes (MFC).
    Ou encore, la version COM avec les interfaces de structured storage, IStorage et IStream.

  3. #3
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Exemple pour ouvrir un fichier en lecture avec CreateFile() :
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    LPCTSTR nomFichier = TEXT("C:\\Repertoire\\Fichier.dat");
    HANDLE hFichier = CreateFile(nomFichier, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
    if(hFichier != INVALID_HANDLE_VALUE)
    {
    	/* Utiliser la fonction ReadFile() pour lire dans le fichier */
     
    	/* ... */
     
    	CloseHandle(hFichier);
    	hFichier=INVALID_HANDLE_VALUE;
    }
    Comme tu le vois, les paramètres "compliqués" se retrouvent à zéro ou NULL.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 112
    Points : 44
    Points
    44
    Par défaut
    C'est bon à lire, ce genre de réponses précises.

    Par contre j'ignore où je dois mettre ce code dans winMain (si c'est bien dedans qu'il faut l'utiliser) mais je le mets en tout dernier, c'est correct ?



    J'aurai aussi voulu savoir pourquoi c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    hFichier = INVALID_HANDLE_VALUE;
    Et pas return; ?




    Désolé pour le temps de réaction...

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    C'est bien simple:
    • C'est pas return, car je ne sais pas si tu veux faire quelque chose ensuite, donc je n'ai aucune raison de mettre un return ici;
    • Et c'est hFichier = INVALID_HANDLE_VALUE;, parce qu'après le CloseHandle(), hFichier ne contient plus un handle valide. Donc, je le remets à INVALID_HANDLE_VALUE pour éviter une mauvaise manipulation. C'est l'équivalent de remettre un pointeur à NULL, quoi...


    Quant au fait de le mettre ou non dans WinMain ou en dernier, ben... C'est toi qui vois, non? Ce n'est pas moi qui suis censé savoir quand tu veux utiliser ton fichier ni pour quoi faire!

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 112
    Points : 44
    Points
    44
    Par défaut
    Merci, c'est logique mais j'ai encore du mal à me faire à celle du c.

Discussions similaires

  1. [débutant] ouvrir un fichier en mode debug
    Par julien.63 dans le forum Débuter
    Réponses: 2
    Dernier message: 06/05/2009, 21h50
  2. ouvrir un fichier
    Par sofiane61 dans le forum MFC
    Réponses: 3
    Dernier message: 10/01/2004, 23h04
  3. [java][Oracle]Ouvrir un fichier(blob) avec le browser
    Par marsup54 dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 11/09/2003, 13h35
  4. [VBA-E] ouvrir un fichier .xls sans executer les macro
    Par lae_t2 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/01/2003, 17h07
  5. [Kylix] Ouvrir un fichier en étant dans KYLIX
    Par Jackepsi dans le forum EDI
    Réponses: 2
    Dernier message: 05/11/2002, 15h59

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