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

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    90
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 90
    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
    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 �prouv�
    Inscrit en
    Avril 2004
    Messages
    122
    D�tails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 122
    Par d�faut
    Salut, un petit bout de code serait le bienvenu !

  4. #4
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    90
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 90
    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
    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
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    90
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 90
    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
    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
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    90
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 90
    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
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    90
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 90
    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