Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1394 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [win C++] Scanner un disuqe dur (enfin une partoche)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[win C++] Scanner un disuqe dur (enfin une partoche)

n°127625
juju_le_ba​rbare
Vous fiez pas aux apparences !
Posté le 18-04-2002 à 10:27:15  profilanswer
 

Bonjour,
 
j'aimerais scanner tout mon disque D:, et savoir si tel ou tel fichier est un dossier ou un fichier :
 

Code :
  1. void scan(char *dos)
  2. {
  3. SetCurrentDirectory(dos);
  4. WIN32_FIND_DATA *cherche = new WIN32_FIND_DATA;
  5. HANDLE ch = FindFirstFile("*.*", cherche);
  6. bool next = true;
  7. while (next)
  8. {
  9. SetFileAttributes(cherche->cFileName, FILE_ATTRIBUTE_NORMAL);
  10. MessageBox(NULL, cherche->cFileName, "youhou", MB_OK);
  11. if (cherche->dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY)
  12.   {
  13.   MessageBox(NULL, "est un dossier", "youhou", MB_OK);
  14.   scan(cherche->cFileName);
  15.   }
  16. else
  17.   MessageBox(NULL, "n'est pas un dossier", "youhou", MB_OK);
  18. next = FindNextFile(ch, cherche);
  19. }
  20. delete cherche;
  21. FindClose(ch);
  22. }
  23. //------------------------------------------------
  24. ---------------------------
  25. WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
  26. {
  27. scan("d:" );
  28. return 0;
  29. }


 
Seulement il m'indique le premier dossier (qui contient des sous-dossiers), puis en suite m"indique ". est un dossier" sans fin.
Comment faire ma fonction récursive correctement ?
 
@++
 
http://www.juju-le-barbare.fr.fm


---------------
Visitez mon site : http://www.jujubarbare.linux-fan.com
mood
Publicité
Posté le 18-04-2002 à 10:27:15  profilanswer
 

n°127653
youdontcar​e
Posté le 18-04-2002 à 11:02:18  profilanswer
 

y'a un truc qui me saute aux yeux : tu fais un setCurrentDirectory() au début de ta fonction, pour lister les fichiers d'un répertoire.
 
en cas de nouveau répertoire, tu réentres dans la fonction. dès que tu en sors, tu appelles findNext(), qui va à ton avis chopper les fichiers de quelle directory ?
 
(pour être plus clair, il manque un setCurrentDirectory() après ton scan()).

n°127734
juju_le_ba​rbare
Vous fiez pas aux apparences !
Posté le 18-04-2002 à 11:48:10  profilanswer
 

youdontcare a écrit a écrit :

y'a un truc qui me saute aux yeux : tu fais un setCurrentDirectory() au début de ta fonction, pour lister les fichiers d'un répertoire.
 
en cas de nouveau répertoire, tu réentres dans la fonction. dès que tu en sors, tu appelles findNext(), qui va à ton avis chopper les fichiers de quelle directory ?
 
(pour être plus clair, il manque un setCurrentDirectory() après ton scan()).  




 
je suis ta piste, l'ami :hello:
 
@++
 
http://www.juju-le-barbare.fr.fm


---------------
Visitez mon site : http://www.jujubarbare.linux-fan.com
n°127751
juju_le_ba​rbare
Vous fiez pas aux apparences !
Posté le 18-04-2002 à 11:57:41  profilanswer
 

salut,
 
que je mette SetCurrentDirectory(cherche->cFileName);
avant ou après le scan(cherche->cFileName);  
j'y arrive pas :(((
 
bouhou !!
je suis nul ;)
 
@++
 
http://www.juju-le-barbare.fr.fm


---------------
Visitez mon site : http://www.jujubarbare.linux-fan.com
n°127754
antp
Super Administrateur
Champion des excuses bidons
Posté le 18-04-2002 à 12:01:11  profilanswer
 

Exemple d'une fonction récursive avec FindFirst/Next
(en Pascal mais bon ça change pas grand chose à la logique)
 

Code :
  1. procedure Deltree(sDir: string);
  2.   var
  3.     iIndex   : integer;
  4.     SearchRec : TSearchRec;
  5.     sFileName : string;
  6.   begin
  7.     sDir := sDir + '\*.*';
  8.     iIndex := FindFirst(sDir, faAnyFile, SearchRec);
  9.     while iIndex = 0 do
  10.     begin
  11.        sFileName := ExtractFileDir(sDir)+'\'+SearchRec.Name;
  12.        if SearchRec.Attr = faDirectory then
  13.        begin
  14.          if (SearchRec.Name <> '' ) and
  15.               (SearchRec.Name <> '.') and
  16.               (SearchRec.Name <> '..') then
  17.             Deltree(sFileName);
  18.        end else
  19.        begin
  20.          if SearchRec.Attr <> faArchive then
  21.             FileSetAttr(sFileName, faArchive);
  22.          DeleteFile(sFileName);
  23.        end;
  24.        iIndex := FindNext(SearchRec);
  25.     end;
  26.     FindClose(SearchRec);
  27.     RemoveDir(ExtractFileDir(sDir));
  28.   end;


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°128422
juju_le_ba​rbare
Vous fiez pas aux apparences !
Posté le 19-04-2002 à 11:29:37  profilanswer
 

antp a écrit a écrit :

Exemple d'une fonction récursive avec FindFirst/Next
(en Pascal mais bon ça change pas grand chose à la logique)
 

Code :
  1. procedure Deltree(sDir: string);
  2.   var
  3.     iIndex   : integer;
  4.     SearchRec : TSearchRec;
  5.     sFileName : string;
  6.   begin
  7.     sDir := sDir + '\*.*';
  8.     iIndex := FindFirst(sDir, faAnyFile, SearchRec);
  9.     while iIndex = 0 do
  10.     begin
  11.        sFileName := ExtractFileDir(sDir)+'\'+SearchRec.Name;
  12.        if SearchRec.Attr = faDirectory then
  13.        begin
  14.          if (SearchRec.Name <> '' ) and
  15.               (SearchRec.Name <> '.') and
  16.               (SearchRec.Name <> '..') then
  17.             Deltree(sFileName);
  18.        end else
  19.        begin
  20.          if SearchRec.Attr <> faArchive then
  21.             FileSetAttr(sFileName, faArchive);
  22.          DeleteFile(sFileName);
  23.        end;
  24.        iIndex := FindNext(SearchRec);
  25.     end;
  26.     FindClose(SearchRec);
  27.     RemoveDir(ExtractFileDir(sDir));
  28.   end;

 




 
Salut,
 
merci c'est parfait j'ai adapté en C++ et ça marche impec.
Si tu veux le code dis le moi (sauf qu'il delete pas, il remplis un ListBox1)


---------------
Visitez mon site : http://www.jujubarbare.linux-fan.com
n°128428
antp
Super Administrateur
Champion des excuses bidons
Posté le 19-04-2002 à 11:34:55  profilanswer
 

Ça ira, j'ai déjà utilisé ça en C++, mais ici au boulot je n'avais que la fonction en Pascal sous la main ;)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°128484
juju_le_ba​rbare
Vous fiez pas aux apparences !
Posté le 19-04-2002 à 12:36:46  profilanswer
 

antp a écrit a écrit :

Ça ira, j'ai déjà utilisé ça en C++, mais ici au boulot je n'avais que la fonction en Pascal sous la main ;)  




oky.
Tu peux m'envoyer (par mail si tu veux) la traduc en C++, que je compare à la mienne ?
 
merci


---------------
Visitez mon site : http://www.jujubarbare.linux-fan.com
n°128488
antp
Super Administrateur
Champion des excuses bidons
Posté le 19-04-2002 à 12:39:43  profilanswer
 

:)
Si j'y pense et que je le retrouve, mais y a pas grand chose de spécial.
À priori les fonctions sont les mêmes (enfin ça l'était pour moi vu que j'utilisais C++Builder, si tu passes par l'API Windows ça je sais pas trop :/)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°128690
juju_le_ba​rbare
Vous fiez pas aux apparences !
Posté le 19-04-2002 à 17:18:03  profilanswer
 

antp a écrit a écrit :

:)
Si j'y pense et que je le retrouve, mais y a pas grand chose de spécial.
À priori les fonctions sont les mêmes (enfin ça l'était pour moi vu que j'utilisais C++Builder, si tu passes par l'API Windows ça je sais pas trop :/)  




salut,
 
je n'ai pas utilisé la VCL, mais les API en effet...
 
merci


---------------
Visitez mon site : http://www.jujubarbare.linux-fan.com

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [win C++] Scanner un disuqe dur (enfin une partoche)

 

Sujets relatifs
[VC++6] Scanner un dossier**C** Comment scanner une string rentree par un utilisateur?
[PL/SQL] comment scanner un répertoire précis sur un disque 
Plus de sujets relatifs à : [win C++] Scanner un disuqe dur (enfin une partoche)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR