+7(960) 250-82-68 info@mirossa.ru


 mirossa        1С           C         PHP       JAVA  


Статьи
 
 

Получить список файлов во вложенных подкаталогах

CMD.exedownload getFiles.exe
CMD.exedownload 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 ( FILE_ATTRIBUTE_DIRECTORY != dataF -> dwFileAttributes )
			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);
			
		}
	}
	 
 }
 

 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);
			
			} else 
				fprintf( out, "error\n");
			
	}
	
	if ( handleNext != INVALID_HANDLE_VALUE )
		FindClose(handleNext);
	 
	fclose(in);
	fclose(out);
return 0;
	
 }

Пример

Указать нужные каталоги в getFilesIni.txt (указать диск - "E:"). Запустить программу. Появится(или перезапишется) файл getFileslist.txt

pict getFiles

получается

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...