Как проверить, сколько файлов в папке? - PullRequest
1 голос
/ 05 января 2012

Я хотел бы проверить, сколько файлов в указанном каталоге.Например, рядом с моим .exe-файлом должен находиться каталог resources, и я хотел бы проверить, сколько в нем файлов .txt.

Как это можно сделать в C ++ в Windows?

Ответы [ 3 ]

6 голосов
/ 05 января 2012

Я бы использовал boost :: filesystem. Есть даже пример программы , в которой большая часть работы сделана для вас.

3 голосов
/ 05 января 2012

Это зависит от операционной системы.В Windows вы должны использовать FindFirstFile и FindNextFile для перечисления содержимого каталога, используя соответствующий фильтр, например "*.txt".Не забывайте звонить FindClose, когда вы закончите.

В операционных системах на основе Unix вы будете использовать opendir(3) и readdir(3) для перечисления содержимого каталога.Вам придется отфильтровать имена файлов самостоятельно.Не забудьте позвонить closedir(3), когда вы закончите.

0 голосов
/ 05 января 2012

Этот код MS Windows перечисляет все .txt файлы в C :. Чтобы получить список всех других файлов, измените strcpy(DirSpec, "c:\\*.txt") на strcpy(DirSpec, "c:\\*").

#include <stdio.h> 
#include <stdlib.h> 
#define _WIN32_WINNT 0x0501 
#include <windows.h> 
#define BUFSIZE MAX_PATH 

int main(int argc, char *argv[]) 
{ 
    WIN32_FIND_DATA FindFileData; 
    HANDLE hFind = INVALID_HANDLE_VALUE; 
    DWORD dwError; 
    LPSTR DirSpec;
    unsigned int nFiles=0;
    DirSpec = (LPSTR) malloc (BUFSIZE); 
    strcpy(DirSpec, "c:\\*.txt"); 

    printf ("Current directory : %s\n\n", DirSpec); 

    hFind = FindFirstFile(DirSpec, &FindFileData); 
    if (hFind == INVALID_HANDLE_VALUE) 
    { 
        printf ("incorrect Handle : %u.\n", GetLastError()); 
        return (-1); 
    } 
    else 
    { 
        printf ("%s\n", FindFileData.cFileName); 


        while ( FindNextFile (hFind, &FindFileData) != 0) 
        { 
             nFiles++;
             printf ("%s\n", FindFileData.cFileName); 
        } 

        dwError = GetLastError(); 
        FindClose(hFind); 

        printf ("\n %d files found.\n\n", nFiles); 

        if (dwError != ERROR_NO_MORE_FILES) 
        { 
             printf ("FindNextFile Error.\n", dwError); 
             return (-1); 
        } 
    } 
    free(DirSpec); 
   return (0); 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...