Получить список файлов во вложенных подкаталогах
download getFiles.exe
download getFiles32bit.exe
//cd "C:\Program Files\mingw-w64\x86_64-8.1.0-win32-seh-rt_v6-rev0\mingw64\bin"
//x86_64-w64-mingw32-gcc.exe getFiles.c -o getFiles.exe
// getFiles.exe
//cd "C:\Program Files (x86)\C-Free 5\mingw\bin"
//gcc.exe getFiles.c -o getFiles32bit.exe
// getFiles32bit.exe
#include <stdio.h>
#include <windows.h>
#define f1 "\\*.*"
void findF(char * path, HANDLE handleNext, WIN32_FIND_DATAA * dataF, FILE * out){
while ( FindNextFileA(handleNext, dataF) != 0 ){
if ( (dataF -> dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != FILE_ATTRIBUTE_DIRECTORY )
fprintf(out, "%s\\%s\n", path, dataF -> cFileName);
else{
if ( (dataF -> cFileName)[0] == '.' && (dataF -> cFileName)[1] == '.' ) // ".."
continue;
char newDirF[MAX_PATH];
snprintf(newDirF, sizeof newDirF, "%s\\%s", path, dataF -> cFileName);
char pathN[MAX_PATH];
snprintf(pathN, sizeof pathN, "%s\\%s%s", path, dataF -> cFileName, f1);
HANDLE handleNext2 = FindFirstFileA( (LPCTSTR)(pathN), dataF); // => dataF.cFileName = "."
findF(newDirF, handleNext2, dataF, out);
FindClose(handleNext2);
}
}
}
int main(void)
{
FILE * in = fopen("getFilesIni.txt", "r");
char path[MAX_PATH]; // MAX_PATH = 260
char pathN[MAX_PATH];
WIN32_FIND_DATAA dataF;
HANDLE handleNext;
char * n;
if (in == NULL) {
printf("Cannot open \"getFilesIni.txt\" file.\n");
exit (1);
}
FILE * out = fopen("getFileslist.txt", "w");
if (out == NULL) {
printf("Cannot open \"getFileslist.txt\" file.\n");
exit (1);
}
while ( fgets(path, MAX_PATH+1, in) != NULL ){ //остаются символы перевода строки
n = strchr(path, '\n');
if (n != NULL)
*n = '\0';
snprintf(pathN, sizeof pathN, "%s%s", path, f1);
handleNext = FindFirstFileA( (LPCTSTR)pathN, &dataF); // => dataF.cFileName = "."
if ( handleNext != INVALID_HANDLE_VALUE ){
findF( path, handleNext, &dataF, out);
FindClose(handleNext);
} else
fprintf( out, "error\n");
}
//if ( handleNext != INVALID_HANDLE_VALUE )
// FindClose(handleNext);
fclose(in);
fclose(out);
return 0;
}
Пример
Указать нужные каталоги в getFilesIni.txt (указать диск - "E:"). Запустить программу. Появится(или перезапишется) файл getFileslist.txt
получается
C:\test\Другое\Внутренний Предиктор СССР - Психологический аспект истории.pdf
C:\test\Другое\общие комментарии.txt
C:\test\История\История мира\Оскар Йегер - Всемирная история. Т.1. Древний мир.pdf
C:\test\История\История России\Кузьмин Станислав Иванович - Гулаг без ретуши.pdf
C:\test\История\История России\Шмурло Евгений Францевич - История Росии 862-1917.pdf
C:\test\Литература\Зарубежная\Александр Дюма - Граф Монте-Кристо.pdf
C:\test\Литература\Зарубежная\Джордж Оруэлл - 1984.pdf
C:\test\Литература\Зарубежная\Марк Твен - Приключения Гекльберри Финна.pdf
C:\test\Литература\Русская\Александр Пушкин - Руслан и Людмила.pdf
C:\test\Литература\Русская\Лев Толстой - Война и мир.pdf
C:\test\Литература\Русская\Михаил Булгаков - Мастер и Маргарита.pdf
C:\test\Литература\Русская\Фёдор Достоевский - Преступление и наказание.pdf
to be continued...