Fat Pizza's pizza, they are big and they are cheezy
De correcte vertaling van 'chdir' is 'SetCurrentDirectory', maar die hoor je helemaal niet te gebruiken voor recursief loopen. Druk eens op F1 en zoek naar 'FindFirstFile'
Waarom zou je SetCurrentDirectory niet mogen gebruiken? Ik kan me voorstellen dat het niet nodig is, maar is er een reden waarom het slecht zou zijn? Ik ga er daarbij natuurlijk vanuit dat je aan het eind van de recursie weer terugkeert naar de directory waarin je begon.
Om alles wat duidelijker te maken, zo ziet de functie er uit:
Het komt er dus op neer dat elke keer als er een nieuwe map gevonden wordt, deze ook gescant word.
Het probleem is echter deze melding tijdens het compilen:
D:\CPP\week3opdr12\week3opdr12.cpp(178) : error C2065: 'chdir' : undeclared identifier
overigens geeft '_chdir' dezelfde foutmelding.
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
37
38
| void MP3::findInDir(string dir, ofstream &out)
{
struct _finddata_t bestand;
long hFile;
chdir((const_cast<char*>(dir.c_str())));
if((hFile = _findfirst( const_cast<char*>((dir+"*.*").c_str()), &bestand )) == 0L )
{
cout << dir << endl;
cerr << "Er zijn geen bestanden gevonden";
exit(1);
}
else
{
while(_findnext(hFile, &bestand) == 0)
{
if(!(strcmp(bestand.name,".") && strcmp(bestand.name,"..")))
{
//niets
}
else
{
if(bestand.attrib & _A_SUBDIR)
{
cout << "subdir: " << bestand.name << endl;
findInDir(strcat(dir,bestand.name), ofstream &out)
}
else
{
if(vergelijkExt(bestand.name,"mp3"))
{
cout << bestand.name << endl;
}
}
}
}
}
} |
Het komt er dus op neer dat elke keer als er een nieuwe map gevonden wordt, deze ook gescant word.
Het probleem is echter deze melding tijdens het compilen:
D:\CPP\week3opdr12\week3opdr12.cpp(178) : error C2065: 'chdir' : undeclared identifier
overigens geeft '_chdir' dezelfde foutmelding.
[ Voor 12% gewijzigd door JKVA op 11-01-2004 19:19 ]
Fat Pizza's pizza, they are big and they are cheezy
Altijd even de handleiding erbij pakken he:
Run-Time Library Reference: _chdir, _wchdir
Heb je de juiste headers en libraries gebruikt?
Run-Time Library Reference: _chdir, _wchdir
Heb je de juiste headers en libraries gebruikt?
de huidige dir is wordt bijgehouden per proces, niet per thread. Als je code hier dus van afhankelijk is betekent het dat het dus niet thread-safe is. Goed, misschien is dat in het geval van de topicstarter niet erg, maar het is dus goede praktijk om het zoveel mogelijk proberen te vermijden (en in feite zou je SetCurrentDirectory () dus eigenlijk nooit hoeven te gebruiken)Soultaker schreef op 11 januari 2004 @ 17:22:
Waarom zou je SetCurrentDirectory niet mogen gebruiken? Ik kan me voorstellen dat het niet nodig is, maar is er een reden waarom het slecht zou zijn? Ik ga er daarbij natuurlijk vanuit dat je aan het eind van de recursie weer terugkeert naar de directory waarin je begon.
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Pagina: 1