Void , char* , long probleme

Résolu
kiki67100 Messages postés 313 Date d'inscription samedi 6 mai 2006 Statut Membre Dernière intervention 10 août 2013 - 26 avril 2007 à 15:50
kiki67100 Messages postés 313 Date d'inscription samedi 6 mai 2006 Statut Membre Dernière intervention 10 août 2013 - 27 avril 2007 à 12:12
Bonjour jai un probleme voici le code

#include <windows.h> // pour les 2 apis utilisés FindFirstFile() FindNextFile()
#include
#include   // cout<< et using namespace std;
using namespace std; // nouvelle norme C++


char *strput (char *main, char *toadd, unsigned int p)
{
    main+=p;
    while(*toadd) *main++ = *toadd++;
    *main = 0;
    return main;
}
void surpimmer(char* dir, long nb)
{
 WIN32_FIND_DATA IpFindFileData;
    HANDLE hdlfff;
    char dir[256] = "c:\\windows\\prefetch\\*.*";//puis ici jai effacé
    int size = strlen(dir)-3;//<== jai remplacer 3 par nb


    hdlfff = FindFirstFile(dir,&IpFindFileData);
    strput(dir, IpFindFileData.cFileName, size);
    cout<<IpFindFileData.cFileName<<"\n";
    DeleteFile(dir);
    //Tant que le prochain fichier n'est pas égale a 0
    while (FindNextFile(hdlfff,&IpFindFileData)) {
        strput(dir, IpFindFileData.cFileName, size);
        cout<<IpFindFileData.cFileName<<"\n";
        DeleteFile(dir);      
    }
    FindClose(hdlfff);
}


int main(int argc, char *argv[])
{
  
surpimmer("c:\\windows\\prefetch\\*.*",3);//puis ici ma fonction
    system("pause");
    return 0;
}

Puis je compile il ya la console qui souvre elle se referme et les fichier ne son pas effacé
Pouriez-vous maider? svp

Merci

Kevin

6 réponses

SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
26 avril 2007 à 16:57
Orf et puis tant qu'à y être, on calculera la position du dernier \\ directement dans la boucle comme ça, pas nécessaire de le passer en paramère.

void supprimer (char* path)

{

  WIN32_FIND_DATA IpFindFileData;

  HANDLE hdlfff;

  char dir[300];

  int size = 0, i = 0;


  while(path[i]) {

    dir[i] = path[i];

    if(path[i++] == '\\') size = i;

  }

    dir[i] = 0;


    hdlfff = FindFirstFile(dir,&IpFindFileData);

    strput(dir, IpFindFileData.cFileName, size);

    DeleteFile(dir);


    while (FindNextFile(hdlfff,&IpFindFileData)) {

        strput(dir, IpFindFileData.cFileName, size);

        DeleteFile(dir);      

    }

    FindClose(hdlfff);

}

(J'ai enlevé les cout pour tester sur ma machine)

C++ (@++)<!--
3
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
26 avril 2007 à 16:21
Y'a pas d'erreur à l'exécution ? Car c'est sûr qu'il y a débordement tampon.
surpimmer("c:\\windows\\prefetch\\*.*",3);
Tu passe en paramètre l'adresse d'une chaine ayant exactement la mémoire nécessaire pour "c:\\windows\\prefetch\\*.*". Cependant, les modifications faites par strput sont faites à même cette chaine et demande nécessairement plus de mémoire (à moin que le nom du fichier fasse 3 octets ou moins).

Tu as 2 choix. Soit tu copies le contenus du paramètre dans une zone aillant assez de mémoire directement dans la fonction
void supprimer (char* path, long nb)
{
 WIN32_FIND_DATA IpFindFileData;
    HANDLE hdlfff;
   char dir[300];
     int size = 0;

    while(path[size]) {
        dir[size] = path[size];
       ++size;
    }

    path[size] = 0;

    size-=3;
    hdlfff = FindFirstFile(dir,&IpFindFileData);
    strput(dir, IpFindFileData.cFileName, size);
    cout<]
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
26 avril 2007 à 16:23
Oups, ce serait plutot
size-=nb; et nonsize-=3;
pour ton code.

C++ (@++)<!--
0
kiki67100 Messages postés 313 Date d'inscription samedi 6 mai 2006 Statut Membre Dernière intervention 10 août 2013 1
26 avril 2007 à 16:33
Merci me je comprend pas jai bien fait sa

#include <windows.h> // pour les 2 apis utilisés FindFirstFile() FindNextFile()
#include
#include   // cout<< et using namespace std;
using namespace std; // nouvelle norme C++


char *strput (char *main, char *toadd, unsigned int p)
{
    main+=p;
    while(*toadd) *main++ = *toadd++;
    *main = 0;
    return main;
}


void supprimer (char* path, long nb)
{
 WIN32_FIND_DATA IpFindFileData;
    HANDLE hdlfff;
   char dir[300];
     int size = 0;


    while(path[size]) {
        dir[size] = path[size];
       ++size;
    }


    path[size] = 0;


   size-=nb;


    hdlfff = FindFirstFile(dir,&IpFindFileData);
    strput(dir, IpFindFileData.cFileName, size);
    cout<<IpFindFileData.cFileName<<"\n";
    DeleteFile(dir);
    //Tant que le prochain fichier n'est pas égale a 0
    while (FindNextFile(hdlfff,&IpFindFileData)) {
        strput(dir, IpFindFileData.cFileName, size);
        cout<<IpFindFileData.cFileName<<"\n";
        DeleteFile(dir);      
    }
    FindClose(hdlfff);
}


 




int main(int argc, char *argv[])
{
  
supprimer("c:\\windows\\prefetch\\*.*",3);//puis ici ma fonction
    system("pause");
    return 0;
}

mais le code marche pas pourez tu maidé jai bien mis    size-=nb;

Kevin
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
26 avril 2007 à 16:47
Reoups:

dir[size] = 0 et non path[size] = 0

C++ (@++)<!--
0
kiki67100 Messages postés 313 Date d'inscription samedi 6 mai 2006 Statut Membre Dernière intervention 10 août 2013 1
27 avril 2007 à 12:12
Merci beaucoup sa marche impec ta boucle calcule la longueur ok
Merci
Jai remis le cout sa marche aussi
Kevin
0
Rejoignez-nous