Ahoj všichni,
zase potřebuji vaši pomoc... Potřebuji zjistit všechny soubory v dané složce a ve všech subdirektoriích.
Tady mám zdrojový kód, který mi nefunguje...
char appPath[MAX_PATH];
char* GetFN(char *fileName) {//spojí název zadaného souboru a cestu k programu
GetModuleFileName(NULL,appPath,MAX_PATH);
string currentDir = appPath;
size_t i = currentDir.rfind("\\", strlen(appPath));
currentDir.resize(i + 1);
currentDir.append(fileName);
ZeroMemory(appPath,strlen(appPath));
strcpy(appPath,currentDir.c_str());
return appPath;
}
bool Tie(char start[MAX_PATH]){
vector<string> vList;//sem přijdou jednotlivé soubory
vector<string>::iterator itr;
vector<string> vDirs;//sem se ukáldají složky
vector<string>::iterator itrD;
vDirs.push_back(start);/*jako první se do seznamu přidá počáteční složka,
kterou získáme z parametru této fce*/
for(itrD=vDirs.begin();itrD!=vDirs.end();itrD++){//bude procházet celý seznam složek
/*při druhém průchodu debugger vyhodí chybu (viz přílohu)*/
char mem[1024];
WIN32_FIND_DATA wfd;
HANDLE hf;
sprintf(mem, "%s*", itrD->c_str());//do "mem" se uloží např.: "C:\Program Files\*"
hf=FindFirstFile(mem, &wfd);//začneme vyhledávání souborů první sloužkou v seznamu
if(hf==INVALID_HANDLE_VALUE)
return 0;
do{
if(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){
if(strcmp(wfd.cFileName, ".")!=0 && strcmp(wfd.cFileName, "..")!=0){
sprintf(mem, "%s%s\\", itrD->c_str(), wfd.cFileName);
vDirs.push_back(mem);/*pokud je nalezený soubor složkou,
přidáme ho do seznamu složek*/
}
}else{
sprintf(mem, "%s%s", itr->c_str(), wfd.cFileName);
vList.push_back(mem);//všechny soubory ukládáme do seznamu souborů
}
}while(FindNextFile(hf, &wfd) != 0);
FindClose(hf);
}
ofstream fout;
fout.open(GetFN("cache.tmp"), ios::out);
for(itr=vList.begin();itr!=vList.end();itr++){
fout << itr->c_str();//seznam souborů uložíme
}
fout.close();
return 1;
}
Podle mě je chyba v tom, že se ten seznam složek neustále mění... Nevím to ale určitě a už vůbec nevím, co s tím mám dělat..
Ještě jednou vás prosím, abyste mi s tím problémem pomohli...