begin process at 2012 05 29 05:00:58
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Divers

 > 

Fonction récursive de destruction d'un repertoire et son sous ensemble qui marche presque


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Fonction récursive de destruction d'un repertoire et son sous ensemble qui marche presque

mardi 4 avril 2006 à 11:52:14 | Fonction récursive de destruction d'un repertoire et son sous ensemble qui marche presque

opala

Bonjour, je suis en train de faire une fonction qui détruit un répertoire récursivement avec l'ensemble des sous repertoires.
malheureusement, même si mon sous répertoire a été vidé, la destruction du repertoire rmdir(szRepertoire); ne marche pas systèmatiquement. Un peu comme si je n'avais pas fermé un objet 

Quelqu'un peut t'il m'aider?

int DelRepertoire(LPSTR szRepertoire)
{
 HANDLE HFile;
 WIN32_FIND_DATA file_i;
 char sPathRep [MAX_PATH +1];
 char sFileSearch [MAX_PATH +1];
 strcpy(sPathRep, szRepertoire);
 if ( szRepertoire[lstrlen(szRepertoire)-1] != '\\')
    sprintf((LPSTR) sPathRep ,"%s%c", szRepertoire, '\\');
 sprintf((LPSTR) sFileSearch, "%s%s", sPathRep, "*");

 HFile = FindFirstFile(sFileSearch,&file_i);
 if (INVALID_HANDLE_VALUE == HFile) return (0);


 sprintf(sFileSearch,"%s%s",sPathRep,file_i.cFileName);
 DeleteFile(sFileSearch);

 while(FindNextFile(HFile,&file_i) != 0)
 {
  if( !strcmp(file_i.cFileName,".") || !strcmp(file_i.cFileName,"..") )
   continue;

  if( (file_i.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) {
   char * buffer = NULL;
   buffer=(char*) malloc( sizeof(char)*(strlen(sPathRep)+strlen(file_i.cFileName)+1) );
   strcpy(buffer,sPathRep);
   strcat(buffer,file_i.cFileName);
   strcat(buffer,"\\");
   DelRepertoire(buffer, "*");
  }
  else
  {
   sprintf(sFileSearch,"%s%s",sPathRep,file_i.cFileName);
   DeleteFile(sFileSearch);
  }
 }
 FindClose(HFile);
 [b]rmdir(szRepertoire);[/b]
 return(0);
}

mardi 4 avril 2006 à 20:45:14 | Re : Fonction récursive de destruction d'un repertoire et son sous ensemble qui marche presque

BruNews

Administrateur CodeS-SourceS

Un exemple:

#include <windows.h>

__inline char* bnstrcpy(char *dst, char *src) // return ptr sur NULL final
{
  __asm {
    mov   eax, dst
    mov   ecx, src
    dec   eax
LcpyLoop:
    mov   dl, [ecx]
    inc   eax
    inc   ecx
    mov   [eax], dl
    or    dl, dl
    jz    short LcpyOut
    mov   dl, [ecx]
    inc   eax
    inc   ecx
    mov   [eax], dl
    or    dl, dl
    jz    short LcpyOut
    mov   dl, [ecx]
    inc   eax
    inc   ecx
    mov   [eax], dl
    or    dl, dl
    jnz   short LcpyLoop
LcpyOut:
  }
}

typedef struct tagDIRWD {
  WIN32_FIND_DATA wfd;
  char szpthDst[264];
  char *pendDst;
  char buff[264];
} DIRWD, *LPDIRWD;

char szappname[] = "dirVide";
char szEXPORTSFMG[] = "C:\\_ExportSfmgD\\-OMG-";

void __stdcall ViderDossier(LPDIRWD pdw)
{
  HANDLE hfind;
  strcat(pdw->szpthDst, "\\*.*");
  hfind = FindFirstFile(pdw->szpthDst, &pdw->wfd);
  pdw->szpthDst[strlen(pdw->szpthDst) - 3] = 0;
  if(hfind == INVALID_HANDLE_VALUE) return;
nextfl:
  if(pdw->wfd.cFileName[0] == '.') goto verifnext;
  if(pdw->wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
    strcat(pdw->szpthDst, pdw->wfd.cFileName);
    ViderDossier(pdw);
  }
  else {
    bnstrcpy(bnstrcpy(pdw->buff, pdw->szpthDst), pdw->wfd.cFileName);
    SetFileAttributes(pdw->buff, FILE_ATTRIBUTE_NORMAL);
    DeleteFile(pdw->buff);
  }
verifnext:
  if(FindNextFile(hfind, &pdw->wfd)) goto nextfl;
  if(hfind != INVALID_HANDLE_VALUE) {
    char *c;
    FindClose(hfind);
    c = pdw->pendDst;
    while(*c) c++; // SUR ZERO FINAL
    if((c -= 2) <= pdw->pendDst) return; // SI NON RACINE, RECULE DE 1 DOSSIER
    while((*c != '\\') && (c > pdw->pendDst)) c--;
    if(++c < pdw->pendDst) c = pdw->pendDst;
    if(c > pdw->pendDst) { // CONSERVE DOSSIER DE BASE
      SetFileAttributes(pdw->szpthDst, FILE_ATTRIBUTE_NORMAL);
      RemoveDirectory(pdw->szpthDst);
    }
    *c = 0;
  }
}

void __stdcall VidangeExports()
{
  DIRWD dwd;
  dwd.pendDst = bnstrcpy(dwd.szpthDst, szEXPORTSFMG);
  ViderDossier(&dwd);
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE x, PSTR y, int z)
{
  VidangeExports();
  return 0;
}

Invalider ligne "CONSERVE DOSSIER DE BASE" pour suppression du dossier de départ.

ciao...
[ Lien ]
BruNews, MVP VC++



Cette discussion est classée dans : file, cfilename, spathrep, szrepertoire, sfilesearch


Répondre à ce message

Sujets en rapport avec ce message

Problème avec traitement de fichier (cplusplus !) [ par Sianrin ] Voila, j'explique mon problème. Pour voir un peu comment les accès au fichiers se géraient en cplusplus, je me suis mis en tête de faire un programme prob de compilation [ par jacky66 ] salutje debute dans la prog c++pour mon 1 er prog quand je compile il me sort un message fatal error C1083: Cannot open include file: 'idoctidm.h': No Pb avec une fonction windows... [ par Steak ] j'ai un petit probleme avec la fonction NT UpdateResource... voila ce que dit le sdk win32 : BOOL UpdateResource( HANDLE hUpdate, // update-file handl Enregistrer en HEXA un texte avec gcc !! [ par UncleShu ] /* * Ce programme affiche le fichier en HEXADECIMAL et se copie lui-même avec * une autre exetenstion (.txt). Moi je voudrais qui affiche le fichier * Petit probleme de code en C sur Linux !! [ par UncleShu ] Je voudrais créer un fichier dans le réperoire personnel d'un utilisateur mais mon code ne marche pas !!#include #include #include #define DIR $HOM conversion [ par coyotedef ] salut!!lors de la compilation de mon code une erreur apparait. impossible de trouver un remede. "cannot convert parameter 1 from 'char [10]' to 'char' devc++ et glut [ par aluco ] j'ai bo ajouter les fichiers: Options -> Compiler Options -> Add the following commands when calling compiler -> -lglut32 -lopengl32 -lglu32 dans devc Traitement de tableau de caracteres. [ par coyotedef ] Je lit des données a partir d un fichier texte et je classe les caracteres dans un tableau de caracteres. jusque la rien de bien special.mais voila, j pb avec un labyrinthe [ par skinia ] je suis sur un projet de labyrinthe et j'ai bloqué pour l' algorithme du plus court chemin (entre un pt qq du labyrinthe et la cible au milieu).le lab ouverture de fichier avec les MFC [ par steph76 ] Bonjourvoila je programme une application qui ha beusoin d'ouvrir 1 fichier via httpJ'ai donc fait le code suivantCStdioFile *file;CInternetSession IS


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,764 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales