Список всех файлов внутри папки и ее подпапок в Windows - PullRequest
0 голосов
/ 25 января 2019

Я хочу перечислить все файлы, которые запускаются под планировщиком задач, получив доступ ко всем файлам в каталоге "C: \ windows \ system32 \ Tasks" .

Программа должна рекурсивнопродолжайте открывать подпапки в каталоге и перечислять все файлы.В настоящее время я использую ОС Windows .

Я пытался использовать библиотеку COM, но она не отображает задачи в подпапках.У меня 60 задач, но отображается только 12. Итак, я пытаюсь перебрать папку «Задачи» вместо этого.

#include <stdio.h>
#include <dirent.h>

int main(void)
{
    DIR *dir;
    struct dirent *de; 
    if ((dir = opendir("C:\\Windows\\System32\\Tasks")) != NULL);
    {
        printf("The startup Programs are:\n");
        while ((de = readdir(dir)) != NULL)
          {
            printf("%s\n", de->d_name);
          }
    closedir(dir);
    }
   getchar();
}

Я ожидал, что на выходе отобразятся все файлы в текущей папке и подпапках.Однако на выходе отображаются только имя первой папки и выходы.

1 Ответ

0 голосов
/ 25 января 2019

Поскольку, по-видимому, нет полного, простого примера рекурсивного перечисления каталогов под windows, вот один из них:

#include <windows.h>
#include <stdio.h>

void listdirs(char *dir, char *mask)
{
    char fspec[1024], fname[1024];
    WIN32_FIND_DATA     dta;
    HANDLE              hDta;

    sprintf(fspec,"%s/%s",dir, mask);

    if ((hDta= FindFirstFile (fspec, &dta)) != INVALID_HANDLE_VALUE) {
        do {
            if ( !(dta.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) )
            {
                printf ("%s/%s\n", dir, dta.cFileName);
            }
            else
            {
                if (strcmp(dta.cFileName,".")!=0 && strcmp(dta.cFileName,"..")!=0 )
                {
                    sprintf (fname, "%s\\%s", dir, dta.cFileName);
                    listdirs(fname, mask);
                }
            }
        } while (FindNextFile (hDta, &dta));

        FindClose(hDta);
    }
}
int main (int argc, char *argv[])
{
    listdirs(argv[1],argv[2]);  // Usage: progname c:\MyDir *.*
    return 0;
}
...