
Prací se složkami myslím příkaz dir - zjištění obsahu složky. Ve windows není dir jako v Basicu, je tu speciální API, které dokáže najít první soubor a další soubory ve složce. Zde je jednoduchý příklad :
#include <windows.h>
// nesmíme zapomenout, že funkce jsou v modulu
WIN32_FIND_DATA fd;
HANDLE h;
// struktury pro hledání souborů
h = FindFirstFile("C:\\*", &fd);
// najdi jakýkoli - "*" první soubor na adrese C:
// (*.* by nenašlo soubory bez přípony)
// můžeme tam dát třeba "*.txt" pro všechny texťáky
if(!h)
return; // žádný tam není
while(1) {
// ve fd.cFileName je nážev souboru, můžeme ho zpracovat ...
if(strcmp(".", fd.cFileName) && strcmp("..", fd.cFileName)) {
// kromě "složek" . a .. (ty vedou "o patro níž")
if(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
//soubor je složka
} else {
// soubor je soubor
}
}
if(FindNextFile(h, &fd) == 0)
break; // Je tam ještě další soubor ?
}
|
#include <string.h>
#include <windows.h>
#include <stdio.h>
FILE *fw;
void FindFiles(char *slozka)
{
char pom[256];
WIN32_FIND_DATA fd;
HANDLE h;
// struktury pro hledání funkcí
sprintf(pom, "%s*", slozka);
// vlozeni *
h = FindFirstFile(pom, &fd);
// najdi jakýkoli - "*" první soubor na adrese C:
if(!h)
return; // žádný tam není
while(1) {
// ve fd.cFileName je nážev souboru, můžeme ho zpracovat ...
if(strcmp(".", fd.cFileName) && strcmp("..", fd.cFileName)) {
if(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
sprintf(pom, "%s%s\\", slozka, fd.cFileName);
// vytvoření cesty
FindFiles(pom);
// projdi tuto složku
} else { // je to soubor
sprintf(pom, "%s%s\n", slozka, fd.cFileName);
// vytvoření názvu
fputs(fw, pom);
// zapsání do souboru
}
}
if(FindNextFile(h, &fd) == 0)
break; // Je tam ještě další soubor ?
}
}
int main()
{
fw = fopen("C:\\tree.txt", "w");
// vytvoří soubor
FindFiles("C:\\");
// projeď strom na disku c ...
fclose(fw);
// uzavři soubor
}
|