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

MFC Discussion :

[MFC] CFileFind [FAQ]


Sujet :

MFC

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 90
    Points : 39
    Points
    39
    Par défaut [MFC] CFileFind
    Bonjour,

    Dans mon appli basée dialogue je doit calculer la taille totale des fichiers contenus dans un dossier (je vais l'appelé dossierParent)....
    Ce dossier contient lui-meme des dossier....et ainsi de suite.

    Mon problème est le suivant :
    Quand je rentre dans le premier dossier de dossierParent, je tombe sur un dossier alors je rentre encore dedans mais quand j'ai calculé la taille de ce dossier je n'arrive pas a revenir dans le dossier d'avant, je sors direct dans le dossierParent et je continue le calcul !

    Ca ne doit pas etre très dur mais ca fait un moment que je suis dessus et je commence a désesperer.

    Si vous voulez un boud de code je vous le donne mais il est assez long alors je le montre pas tout de suite....

    Merci d'avance

    Cheper

  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    en gros tu veux calculer la taille d'un repertoire avec tous ses sous-repertoires ?

    tu peux faire un truc du genre
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    #include <windows.h>
     
    void mycalculTaille(char * rep, __int64 *taille)
    {
        WIN32_FIND_DATA FindFileData;
        char path[MAX_PATH];
        strcpy(path,rep);
        strcat(path,"\\*.*");
        HANDLE hFind = FindFirstFile(path, &FindFileData);
        if (hFind==INVALID_HANDLE_VALUE)
            return;
        if (strcmp(FindFileData.cFileName,".")!=0 && strcmp(FindFileData.cFileName,"..")!=0)
        {
            strcpy(path,rep);
            strcat(path,"\\");
            strcat(path,FindFileData.cFileName);
            mycalculTaille(path, taille);
        }
        DWORD a = 0;
        while (a != ERROR_NO_MORE_FILES)
        {
            if (!FindNextFile(hFind, &FindFileData))
                a = GetLastError();
            else
            {
                if (strcmp(FindFileData.cFileName,".")!=0 && strcmp(FindFileData.cFileName,"..")!=0)
                {
                    strcpy(path,rep);
                    strcat(path,"\\");
                    strcat(path,FindFileData.cFileName);
                    if (FindFileData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY)
                        mycalculTaille(path, taille);
                    else
                    {
                        *taille = *taille + (FindFileData.nFileSizeHigh * ((long)MAXDWORD+1) + FindFileData.nFileSizeLow);
                    }
                }
            }
        }
        FindClose(hFind);
    }
     
    __int64 calculTaille(char * rep)
    {
    	__int64 taille;
    	taille = 0;
        mycalculTaille(rep, &taille);
        return taille;
    }
     
    int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
    {
    	__int64 taille = calculTaille("d:\\truc");
    	return 1;
    }

  3. #3
    Membre habitué
    Inscrit en
    Avril 2004
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 122
    Points : 138
    Points
    138
    Par défaut
    Salut, un petit bout de code serait le bienvenu !

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 90
    Points : 39
    Points
    39
    Par défaut
    nico-pyright(c) je sais pas ce que mon VS 2003 a contre toi mais a chaque fois il me sort cette erreur :

    Setup_PervasiveDlg.obj : error LNK2019: symbole externe non résolu "public: int __thiscall CSetup_PervasiveDlg::calculTaille(char *)" (?calculTaille@CSetup_PervasiveDlg@@QAEHPAD@Z) référencé dans la fonction "public: void __thiscall CSetup_PervasiveDlg::OnBnClickedOk(void)" (?OnBnClickedOk@CSetup_PervasiveDlg@@QAEXXZ)
    Debug/Setup_Pervasive.exe : fatal error LNK1120: 1 externes non résolus
    Comment je peux faire??

  5. #5
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    nonon, cette fois-ci pas d'accord

    Pourrais-je voir le prototype dans le .h de la classe, le corps de la fonction dans le .cpp, et l'appel dans le OnBnClickedOk ?

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 90
    Points : 39
    Points
    39
    Par défaut
    Voici l'appel :
    __int64 taille = calculTaille(SRC_PERVASIVE);
    SRC_PERVASIVE est un #define SRC_PERVASIVE "c:\\trucmuche"

    Le prototype dans le .h :
    __int64 calculTaille(char * rep);
    et le corp de la fonction dans le .cpp :
    __int64 calculTaille(char * rep)
    {
    __int64 taille;
    taille = 0;
    mycalculTaille(rep, &taille);
    return taille;
    }

  7. #7
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    si tu l'as inclu dans une classe, le corps de la fonction doit etre écrit comme ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CSetup_PervasiveDlg::__int64 calculTaille(char * rep) 
    {
    ...
    }

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 90
    Points : 39
    Points
    39
    Par défaut
    J'avoue j'ai été nul sur ce coup là..........

    Mais il y a deux nouvelles erreurs :
    c:\Documents and Settings\Tom\Bureau\Vivien\Setup_Pervasive\Setup_PervasiveDlg.cpp(831) : error C2511: 'void CSetup_PervasiveDlg::mycalculTaille(char *,__int64 *)' : impossible de trouver la fonction membre surchargée dans 'CSetup_PervasiveDlg'
    c:\Documents and Settings\Tom\Bureau\Vivien\Setup_Pervasive\Setup_PervasiveDlg.h(14) : voir la déclaration de 'CSetup_PervasiveDlg'
    c:\Documents and Settings\Tom\Bureau\Vivien\Setup_Pervasive\Setup_PervasiveDlg.cpp(874) : error C2664: 'CSetup_PervasiveDlg::mycalculTaille' : impossible de convertir le paramètre 2 de '__int64 *__w64 ' en 'int'
    Cette conversion requiert reinterpret_cast, un cast de style C ou un cast de style fonction

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 90
    Points : 39
    Points
    39
    Par défaut
    Je crois qu'il me reste plus qu'a allé me caché très loin.........
    A vouloir allé trop vite et étant un peu enervé voilà j'ai fait n'importe quoi !!
    Merci pour ton code il est parfait !!

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

Discussions similaires

  1. [MFC] CFileFind ordre croissant
    Par pitch21 dans le forum MFC
    Réponses: 5
    Dernier message: 07/02/2006, 16h06
  2. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57
  3. [MFC](encapsulation ADO) ou placer le code
    Par philippe V dans le forum MFC
    Réponses: 2
    Dernier message: 13/06/2002, 14h58
  4. Réponses: 2
    Dernier message: 10/06/2002, 11h03
  5. [MFC] ADO connection
    Par philippe V dans le forum MFC
    Réponses: 3
    Dernier message: 10/06/2002, 07h36

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