2012-01-04 2 views
1

지정한 디렉토리에 얼마나 많은 파일이 있는지 확인하고 싶습니다. 예를 들어 resources이라는 내 .exe 옆에 디렉토리가 있고 그 안에 .txt 파일의 수를 확인하고 싶습니다.폴더에 얼마나 많은 파일이 있는지 확인하는 방법은 무엇입니까?

어떻게 Windows에서 C++로이 작업을 수행 할 수 있습니까?

+0

어떤 운영 체제입니까? –

+2

100 % OS depedent. 어떤 종류의 filsystem도 존재하지 않는 C로 프로그래밍 된 시스템이 있다는 것을 알아 두십시오. 그러한 시스템에서 fopen을 호출하면 링커 오류가 발생합니다! –

+2

지금 Windows로 태그가 붙어 있으므로 FindFirstFile(), FindNextFile() 및 FindClose() API 호출이 될 것입니다. –

답변

3

운영 체제에 따라 다릅니다. Windows에서는 "*.txt"과 같은 적절한 필터를 사용하여 FindFirstFileFindNextFile을 사용하여 디렉터리 내용을 열거합니다. 완료되면 FindClose으로 전화를 걸지 마십시오.

UNIX 기반 운영 체제에서는 opendir(3)readdir(3)을 사용하여 디렉터리 내용을 열거합니다. 파일 이름을 직접 필터링해야합니다. 완료시 closedir(3)으로 전화하는 것을 잊지 마십시오.

6

나는 boost :: filesystem을 사용할 것이다. 대부분의 작업이 완료된 sample program도 있습니다.

0

이 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); 
} 
관련 문제