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

[Debutant] Accéder aux informations du système de fichiers


Sujet :

C++

  1. #1
    Futur Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 13
    Points : 9
    Points
    9
    Par défaut [Debutant] Accéder aux informations du système de fichiers
    Bonjour,

    J'ai des bases en C, plutot côté algo mais je n'ai jamais codé...

    Là je me suis décidé de réaliser une appli de mise à jour d'un disque dur en fonction de sa capacité et de la date des derniers fichiers. Le but final est de lancer une appli qui va créer une base de données de fichiers et de certains attributs (nom, date de modification, taille sur le disque, taille réelle) afin de purger les fichiers inutiles et de laisser assez de place pour copier les plus récents...

    Malheureusement, je ne sais accéder ni au disque dur ni aux attributs (qu'ils soient NTFS ou FAT) ...

    Quelqu'un peut sûrement me relancer un peu ? Quelles librairies dois-je déclarer et comment accéder au système de fichiers ?

    Ensuite petite question conceptuelle ... j'ai remarqué que mon compilateur (j'utilise un truc gratos : Bloodshed Dev-C++) faisait une différence entre C et C++, or je croyais que la seule différence résidait dans les structures de données : mon programme serait en C ou en C++ sachant que je comptais créer 4 tableaux (façon base de données en SQL) avec des types différents, est-ce possible ?

    PS : je me rappelle de vagues notions fopen, fclose, fread ... Mais là je pense que la table d'allocation des fichiers pourrait pré-remplir ma base de données et qu'ensuite une simple copie (gérée par windows ou par mon programme si qqun me donne une ouverture très ... ouverte ...)

    Merci à tous ce forum est bien classe, j'ai récupéré pas mal de supers info grâce à vous tous sur Firebird !

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 518
    Points
    41 518
    Par défaut
    La plupart de ces fonctionnalités réclament des fonctions spécifiques de l'OS.

    Pour les types de systèmes fichiers et compagnie, sous Windows, il faut voir du coté de DeviceIoControl() ou GetVolumeInformation(), et pour les fichiers, GetFileAttributes(), pour les répertoires, FindFirstFile/FindNextFile/FindClose...

    Sous unixoïde, ce sont d'autres fonctions...

    Pour le C et le C++, il y a pas mal de différences entre les deux, mais un programme bien fait peut avoir des sources en C et d'autres en C++.
    Une structure de données C est facile à utiliser en C++. Dans l'autre sens, une classe sans fonctions membre équivaut à peu près à une structure du C...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Futur Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Merci de votre réponse Médinoc !

    Donc je n'ai pas besoin de bibliothèque spéciale à charger dans les directives du pré-processeur ?

    Je n'ai pas trouvé la description des fonctions dont vous parlez dans l'aide de Dev-C++ ! Est-ce parce que j'utilise un truc gratuit ou bien parce que je ne sais pas trouver la documentation ?

    Sinon j'ai trouvé des infos sur le tutoriel C++ du site sur les fonctions de l'API windows... Est-ce à l'API windows que vos fonctions font appel ? Où trouver une liste des fonctions ?

    Voilà ce que dit le Tutoriel :
    Pour énumérer des fichiers, l'API Windows offre une sélection de 3 fonctions : FindFirstFile(), FindNextFile() et FindClose(). La fonction FindFirstFile() initialise la recherche et retourne le premier fichier trouvé (si il y en a un). Elle retourne un HANDLE sur la recherche en cours, pour permettre de poursuivre la recherche. Le fonction FindNextFile() doit ensuite être appelée pour récupérer l'ensemble des fichiers trouvés. Généralement cette fonction sera appelée dans une boucle. La fonction FindClose() referme le HANDLE et libère la mémoire occupée.

    Cette suite de fonctions permet d'effectuer des recherches dans un dossier. Attention, les sous dossiers ne seront pas parcourus. La recherche peut porter sur un listage non exhaustif, par exemple, listage des fichiers '*.txt'. Pour un listage exhaustif, il faudra demander le listage des fichiers '*.*'. Le type de recherche, ainsi que le dossier de recherche sont passés à la fonction FindFirstFile() sous forme d'une chaîne de caractère de type : Chemin\\Masque (ex. c:\*.*). Aucune fonction n'est fournie pour le parcours récursif des dossiers de manière à explorer les dossiers et sous dossiers. Pour effectuer une recherche complète, il faut effectuer des appels successifs à ces 3 fonctions de manière à parcourir l'ensemble des sous dossiers. Lors d'une recherche, les pseudo-dossiers '.' et '..' sont également listés. Il peut donc être utile d'effectuer un test pour supprimer ces dossiers du listage final. Les informations concernant les fichiers et dossiers listés sont placées dans une structure WIN32_FIND_DATA (attributs, nom, taille...).

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Les fonctions que j'ai citées font partie de l'API Windows. Pour plus d'information dessus, voir http://msdn.microsoft.com/library
    à gauche, il y a un champ "recherche". Enjoy!
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Futur Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Merci beaucoup Médinoc,
    je commence à comprendre un peu mieux l'architecture en couches ; étant administrateur réseau je ne connaissais pas l'emploi des couches hautes d'API.

    Puis-je me permettre de vous demander un exemple ou un lien vers ce type d'exemple ?
    Par exemple un bout de code permettant d'afficher toutes les propriétés d'un fichier sous windows ? Je pense être capable de finir mon programme. En fait je ne comprends toujours pas comment intégrer les fonctions dont vous m'avez parlé avec les propriétés de l'API windows sur MSDN ! (pour l'instant mon plus gros programme en C c'était une conversion de chiffres romains anciens et modernes à l'aide de deux tableaux !! Sinon je ne connais bien que le PHP qui est vraiment peu rigoureux à côté du langage C et C++).

    L'API de windows fait-elle une différence entre NTFS et FAT ? Fait-elle référence au système de fichiers ?
    Pourquoi y-a-t-il si peu d'attributs dans la description des fichiers MSDN ? ( http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/file_table.asp )
    Je pense surtout aux attributs CACLS (listes de contrôles d'accès) de NTFS.

    Merci VRAIMENT de votre aide ! J'avance à pas de géant sur l'algorythme de mon programme même si j'ai encore du mal à le transcrire en C !

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Eh bien, à haut niveau, l'API Windows ne fait pas de différences entre FAT32 et NTFS.
    À bas niveau, elle en fait peu.

    Mais il y a des différences, notamment au niveau des fonctionnalités prises en charge par NTFS (compression (complètement transparente), encryptage etc.), différences que l'on peut voir à bas niveau, ou avec les fonction permettant d'obtenir des infos détaillées sur le système de fichiers.

    Pas contre, pour les listes de contrôle d'accès, désolé, je n'ai pas bossé dessus.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Futur Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Et pour un exemple de code en C/C++ pour afficher les attributs d'un fichier (par exemple nom et taille), savez-vous où je peux trouver un exemple car je ne sais toujours pas comment utiliser les fonctions que vous m'avez recommandées avec les infos que j'ai trouvé sur le MSDN ?

    Merci beaucoup de votre aide !

  8. #8
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 749
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 749
    Points : 10 666
    Points
    10 666
    Billets dans le blog
    3
    Par défaut
    Exemple de la FAQ C:
    http://c.developpez.com/faq/c/?page=...HIERS_dir_list
    WIN32_FIND_DATA contient les infos voulues:
    http://msdn.microsoft.com/library/en-us/fileio/fs/win32_find_data_str.asp
    Pour les droits NTFS, c'est complexe. Il ne faut pas regarder du côté des fichiers mais de la gestion des ACL, vu que c'est pareil sur un fichier ou un autre objet. Ca commence avec GetNamedSecurityInfo, et après accroches-toi.
    http://msdn.microsoft.com/library/en-us/secauthz/security/finding_the_owner_of_a_file_object_in_c__.asp

  9. #9
    Futur Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Merci beaucoup à vous deux !

    Je vais tester ça !

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

Discussions similaires

  1. Accéder aux informations systèmes
    Par MAXXPER dans le forum Applets
    Réponses: 6
    Dernier message: 21/09/2010, 09h02
  2. Accéder aux informations système
    Par Sylver--- dans le forum Langage
    Réponses: 4
    Dernier message: 02/12/2009, 13h42
  3. Accéder aux informations d'un fichier mp3
    Par getz85 dans le forum C#
    Réponses: 3
    Dernier message: 30/04/2009, 12h24
  4. [VB.NET]Accéder aux informations d'un PC a distance
    Par Dnx dans le forum Windows Forms
    Réponses: 2
    Dernier message: 12/10/2005, 11h39

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