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 :

Recupération des tailles des repertoires


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 14
    Par défaut Recupération des tailles des repertoires
    Bonjour,
    Tout d'abord, je tenais à préciser que je suis novice en C++.
    J'ai travaillé avec le code fourni sur la FAQ de C++ Builder mais je n'arrive pas à faire fonctionner mon code.
    Mon but est de récupérer la taille des principaux dossiers des disques durs comme, par exemple, la taille du dossier "Program Files" mais le résultat est erroné!
    Voici le code que j'utilise :
    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
     
    //---------------------------------------------------------------------------
    #include <vcl.h>
    #include <stdio.h>  // Appel des fonctions de base (ex : sprintf)
    #include <dirent.h> // Appel des fonctions qui travaillent sur les répertoires (ex : opendir)
    #include <string.h>
    #include <stdlib.h>
    #include <string.h>
    #include <fstream.h>
    #include <iostream.h>
    #include <io.h>
    #include <fcntl.h>
    #include <dir.h>
    #include <shellapi.h>
    #include <winbase.h>
    #pragma hdrstop
    #include "Main.h"
    #include "..\..\..\..\Lib\C6\comm\comm.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TPrincipal *Principal;
    //---------------------------------------------------------------------------
    __fastcall TPrincipal::TPrincipal(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TPrincipal::BTestClick(TObject *Sender)
    {        
            String PathNomExt = "C:\\Program Files\\";
            WIN32_FILE_ATTRIBUTE_DATA Essai;
            ZeroMemory (&Essai, sizeof(WIN32_FILE_ATTRIBUTE_DATA));
            if ( !GetFileAttributesEx( PathNomExt.c_str(), GetFileExInfoStandard, &Essai ))
            {
                    return; // Erreur
            }
            DWORD Taille_PoidsFort = Essai.nFileSizeHigh;
            DWORD Taille_PoidsFaible = Essai.nFileSizeLow;
            resultat->Text = Taille_PoidsFort;
            Nom_dest->Text = Taille_PoidsFaible;
    }
    Si vous avez des idées, je serai toute ouïe.
    Merci d'avance!
    Dan

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 288
    Par défaut
    Salut Dan,
    Essaye ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int nSize = (Essai.nFileSizeHigh * (MAXDWORD+1)) + Essai.nFileSizeLow;
    Yarp
    www.senosoft.com

  3. #3
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 14
    Par défaut
    Merci Yarp de m'aider!
    Ton code me permet d'optimiser mon calcul.
    Mais, le code que j'utilise fonctionne lorsque j'indique un fichier mais dès que je précise un répertoire le résultat est faux.
    Mon répertoire "Program Files" a une taille de 2.4Go mais, avec mon programme, j'obtient un résultat de 12288 soit environ 13ko.
    Si quelqu'un a des idées, je suis preneur.
    Dan

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 288
    Par défaut
    13 ko ce doit être effectivement la taille de l'entité "Program Files", ça parait cohérent. Pour son contenu, j'ai trouvé ça:
    http://www.codeproject.com/shell/DirectorySize.asp
    ça dit que ça implémente l'interface IColumnProvider. Je crois avoir vu un autre projet similaire sur CodeProject mais impossible de mettre la main dessus. De toute façon avec le Shell le modèle COM est ce qu'il faut utiliser, portable, évolutif et puissant.

    Yarp

    ps Je viens de lire que cela ne fonctionne pas avec Vista, donc pour l'évolutivité il faut que je revoie mes copies.

  5. #5
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 14
    Par défaut
    Merci!
    Je vais étudier ça en profondeur!

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 30/03/2011, 03h07
  2. Taille des fenêtres des formulaires
    Par FCL31 dans le forum IHM
    Réponses: 1
    Dernier message: 20/08/2007, 04h11
  3. Réponses: 1
    Dernier message: 06/07/2007, 13h46
  4. [info] taille des adresses des pointeurs Java
    Par TabrisLeFol dans le forum Général Java
    Réponses: 11
    Dernier message: 14/02/2006, 13h24
  5. [MFC] Taille des pages des CPropertySheet
    Par Negyoshi dans le forum MFC
    Réponses: 3
    Dernier message: 03/04/2005, 13h11

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