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] decrementation inopinée d'un 'long'


Sujet :

MFC

  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] decrementation inopinée d'un 'long'
    Bonjour,

    Dans mon aplli basée dialogue, j'incrémente une variable long pour mettre à jour une barre de progression.....
    Le problème est le suivant :
    Cette variable décremente toute seule.....alors qu'à aucun moment je la décremente.

    Elle est incrémenté dans une fonction récursive c'est peut être le problème mais je ne vois pas pourquoi !!
    Cette variable s'appele : long tailleCourante

    Voici mon code :
    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    void CSetup_PervasiveDlg::myCopieFichiers(char * rep, char* str, int tailleTotale, long tailleCourante)
    {
    	WIN32_FIND_DATA FindFileData;
    	char path[MAX_PATH];
    	char strP[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);
    		strcpy(strP, str);
    		strcat(strP, "\\");
    		strcat(strP, FindFileData.cFileName);
    		CreateDirectory(strP, NULL);
    		myCopieFichiers(path, strP, tailleTotale, tailleCourante);
    	}
    	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);
    				strcpy(strP, str);
    				strcat(strP, "\\");
    				strcat(strP, FindFileData.cFileName);
    				if (FindFileData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY){
    					CreateDirectory(strP, NULL);
    					myCopieFichiers(path, strP, tailleTotale, tailleCourante);
    				}
    				else
    				{
    					CString str;
    					CFile cfo, cfoCopi;
    					DWORD nRet = 4096, totalRead = 0, fileSize = (FindFileData.nFileSizeHigh * ((long)MAXDWORD+1) + FindFileData.nFileSizeLow);
    					char pBuffer[4096];
     
    					cfo.Open(path, CFile::modeRead, NULL);
    					CFileException ex;
     
    					cfoCopi.Open(strP, CFile::modeCreate | CFile::shareExclusive | CFile::modeWrite, NULL);
     
    					str.Format("Copie du fichier %s en cours . . .", FindFileData.cFileName);
    					SetDlgItemText(IDC_ETAT2, str);
    					while (nRet == 4096) {
    						nRet = cfo.Read(pBuffer, 4096);
    						cfoCopi.Write(pBuffer, nRet);
     
    						totalRead += nRet;
    						cPd2->SetPos(totalRead*100/fileSize);
     
    						if (CheckCancelButton()) {
    							cfo.Close(); cfoCopi.Close();
    							exit(0);
    						}
    					}
    					cfo.Close(); cfoCopi.Close();
    					tailleCourante += totalRead;
    					Trace << tailleCourante << "\t\t" << totalRead << endl;
    					cPd->SetPos(tailleCourante*100/tailleTotale);
    				}
    			}
    		}
    	}
    	FindClose(hFind);
    }
    Elle décremente toujours au meme moment et plusieurs fois au cours du traitement...

  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
    forcément ....

    elle reprend les valeurs lors de son appel, il faut que tu la passes par référence, ou alors que tu en fasses un pointeur pour qu'elle conserve sa valeur sans etre écrasée à chaque moment où tu dépiles pour récuperer les valeurs de la fonction

    concretement, comme pour la taille dans mon exemple de calcul de taille

  3. #3
    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
    Ahhh....d'accord
    Je pensais que comme ça ça marcherait....
    Encore merci.......ca devient une habitude

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

Discussions similaires

  1. [MFC] time to long
    Par r0d dans le forum MFC
    Réponses: 4
    Dernier message: 27/07/2006, 18h09
  2. [C++/MFC]Serialize trop long
    Par cjacquel dans le forum MFC
    Réponses: 1
    Dernier message: 15/05/2006, 06h36
  3. [mfc][ado][access] Temps de chargement très très long
    Par julien.nasser dans le forum MFC
    Réponses: 3
    Dernier message: 12/05/2006, 15h57
  4. [MFC][ADO][ACCESS] temps de chargement très très long
    Par julien.nasser dans le forum Access
    Réponses: 2
    Dernier message: 12/05/2006, 15h34
  5. Réponses: 2
    Dernier message: 05/06/2002, 12h29

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