Ваш вопрос в заголовке указывает на необходимость делать то, что вы делаете на Windows, но некоторые из опубликованных вами кодов (например, readdir () ) требуют соответствия POSIX. На Windows работать не будет.
Windows Функции, которые могут использоваться для подсчета файлов и каталогов, включают следующее:
FindFirstFile
FindNextFile
GetFileAttributes
Вот базовая c работа фрейма, с которой вы можете начать. Он компилируется, но потребует адаптации, прежде чем он будет работать для вас. Ваша адаптация потребует перехода вниз по всем найденным каталогам, чтобы найти больше файлов / подкаталогов, а затем вернуться на верхний уровень. Вы можете использовать атрибуты, как показано, для принятия решения о том, является ли найденный файл либо file
, либо directory
, и увеличивать соответствующий счетчик, чтобы отслеживать каждый: (Только в этом примере считает каталоги и файлы первого уровня.)
Добавьте #include
файлов в соответствии с вашей средой, которые должны включать #include <windows.h>
среди прочего.
#include <windows.h>
//include other files as needed for your system
int main(int argc, char *argv[])
{
FILE *out;
int fileCount = 0;
int dirCount = 0;
DWORD attribute;
WIN32_FIND_DATA file;
HANDLE fhandle;
out = fopen("file_list.txt", "w");
if(out == NULL){
printf( "Error creating file\n");
return 0;
}
// Place your own starting point here.
fhandle = FindFirstFile("C:\\play\\*", &file);
if(fhandle == INVALID_HANDLE_VALUE){
printf("Invalid File Handle.\n");
return 0;
}
while(FindNextFile(fhandle, &file) != 0){
attribute = GetFileAttributes(file.cFileName);
switch(attribute) {
case FILE_ATTRIBUTE_DIRECTORY:
dirCount++;
fprintf(out, "DIR - %s\n", file.cFileName);
break;
default:
fileCount++;
fprintf(out, "FILE - %s\n", file.cFileName);
break;
}
}
fprintf(out, "Directories: %d\nFiles :%d\n", dirCount, fileCount);
fclose(out);
return 0;
}