[c++] recursie, door hd lopen

Pagina: 1
Acties:

  • THIJZEL
  • Registratie: Januari 2001
  • Niet online
hallo,

Ik heb een probleem mbt tot het scrollen door dirs dmv een recursieve functie. De onderstaande functie doet het volgende/ zou het volgende moeten doen:
1: scroll door eerste dir en laat alle files met mp3 als extentie zien
2: scroll wederom door dir en roep jezelf nu aan met als argument het path van de gevonden dir

Op deze manier wil ik mijn hd afscannen naar mp3 bestanden. Maar om de een of andere reden bereikt de functie steeds maar de eerste dir. Voorbeeld:
ik scroll door de directorystructuur op d:\\
code:
1
2
3
4
d:\test\
d:\test\mapa\
d:\fotos\
d:\mp3bestanden\

wat er nu tevoorschijn komt door "cout << "full: " << full << endl; //debüg" is:
code:
1
2
3
4
d:\test\
d:\test\mapa\
d:\test\mapa\fotos
d:\test\mapa\mp3bestanden\

Dit zou niet moeten kunnen want de variable full is toch echt lokaal en wordt dus elke keer bij "_fullpath( full, bestand.name , _MAX_PATH ) != NULL " opnieuw gezet.


code:
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
void findInDir(char dir[])
{
        _finddata_t bestand;
        long deFile;
        char full[800];

        chdir(dir); // ga naar de dir
        if( (deFile = _findfirst( "*", &bestand )) != -1L ) //zoek het eerste bestand
        {
                do
                {
                        if (!(bestand.attrib & _A_SUBDIR)) //als het geen subdir is
                                if( _fullpath( full, bestand.name , _MAX_PATH ) != NULL ) // haal het full path op
                                        if (vergelijkExt(bestand.name, "mp3")) //is het een mp3?
                                        cout << full << endl;
                }
                while ( _findnext( deFile, &bestand) == 0 ); // zolang er een item gevonden wordt
        }

        if( (deFile = _findfirst( "*", &bestand )) != -1L )  // zoek wederom eerste item
        {
                do
                {
                        if (bestand.attrib & _A_SUBDIR) // als er een subdir gevonden word
                        {
                                //cout << bestand.name << "\n";
                                if (strcmp(bestand.name, ".") && strcmp(bestand.name, "..")) //subdir is niet . óf ..
                                        if( _fullpath( full, bestand.name , _MAX_PATH ) != NULL ) { //check het full path
                                                cout << "full: " << full << endl;  //debug
                                                findInDir(full);             //roep jezelf aan met de subdir
                                                }
                        }
                }
                while ( _findnext( deFile, &bestand) == 0 );   // zolang er een item gevonden wordt
        }
}

  • THIJZEL
  • Registratie: Januari 2001
  • Niet online
ja! heb het voor elkaar :) moest ff " chdir(dir); " tussen regel 23 en 24 zetten :).

  • D-Raven
  • Registratie: November 2001
  • Laatst online: 16-10-2025
OMG avans hogeschool den bosch huiswerk warning!!! :P

en die chdir oplossing die ook in de opdracht beschrijving staat is en verdomt evil oplossing imo :+

offtopic:
Je had het al lang af moeten hebben joh :D morgen inleveren :+

[ Voor 23% gewijzigd door D-Raven op 21-06-2005 21:00 ]


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
Serieus: is dit HTS huiswerk? evil.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • The End
  • Registratie: Maart 2000
  • Laatst online: 10:10

The End

!Beginning

Waarom doe je chdir? Je kan ook gewoon _findfirst met de directory en wildcard aanroepen...

  • igmar
  • Registratie: April 2000
  • Laatst online: 20-04 22:06

igmar

ISO20022

THIJZEL schreef op dinsdag 21 juni 2005 @ 20:54:
ja! heb het voor elkaar :) moest ff " chdir(dir); " tussen regel 23 en 24 zetten :).
Je moet _findfirst() waarschijnlijk met een absoluut pad aanroepen, en niet met een relatief pad (wat al die functies teruggeven). Het feit dat je een chdir() moet doen bevestigd dat. strcat() en familie zijn hierbij erg handig, of anders een snprintf().

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
std::string is veel handiger dan strcat

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein

Pagina: 1