2009-12-20 7 views
2

디렉토리에서 주어진 확장자를 가진 파일의 수를 세는 것은 C++에서 가능합니까?디렉토리에서 주어진 확장자를 가진 파일의 수를 계산합니다 - C++?

나는이 (의사 코드) 같은 것을 할 것이 좋을 것이다 프로그램을 쓰고 있어요 : 분명히

if (file_extension == ".foo") 
    num_files++; 
for (int i = 0; i < num_files; i++) 
    // do something 

는,이 프로그램은 훨씬 더 복잡하다, 그러나 이것은 당신에게 일반적인 아이디어를 줄 것이다 내가하려는 일 중.

이것이 가능하지 않다면 말해주세요.

감사합니다.

+0

어떤 운영체제입니까? –

+0

UNIX 운영 체제 – Alex

답변

5

.

사용자가 원하는대로 확장 기능에 대해 반환 된 문자열의 끝을 확인하면서 이러한 함수를 반복하는 것입니다. 같은

뭔가 : 언급 한 바와 같이

char *fspec = findfirst("/tmp"); 
while (fspec != NULL) { 
    int len = strlen (fspec); 
    if (len >= 4) { 
     if (strcmp (".foo", fspec + len - 4) == 0) { 
      printf ("%s\n", fspec); 
     } 
    } 
    fspec = findnext(); 
} 

은, 실제 함수를 사용하면 디렉토리를 탐색에 사용할는 OS 별입니다.

UNIX의 경우 거의 확실하게 opendir, readdirclosedir이 사용됩니다. 이 코드는 그 시작을위한 좋은 출발점입니다 :

#include <dirent.h> 

int len; 
struct dirent *pDirent; 
DIR *pDir; 

pDir = opendir("/tmp"); 
if (pDir != NULL) { 
    while ((pDirent = readdir(pDir)) != NULL) { 
     len = strlen (pDirent->d_name); 
     if (len >= 4) { 
      if (strcmp (".foo", &(pDirent->d_name[len - 4])) == 0) { 
       printf ("%s\n", pDirent->d_name); 
      } 
     } 
    } 
    closedir (pDir); 
} 
+0

위의 두 가지 경우 모두. for (;;) 루프가 깔끔하지 않을까요? –

+0

맛이나 스타일의 문제, @Martin, 나는 생각한다. 나는 단순한 것들 (주로 "for i = 1 to 10"정렬)을 위해 for 루프를 사용하는 경향이 있으며, 더 복잡한 루프를 수행하는 동안 사용한다. 그러나 두 경우 모두, 현재의 질문과는 관련이 없습니다. – paxdiablo

6

이러한 종류의 기능은 OS에 따라 다르므로 표준 방식의 이식 방법이 없습니다.

그러나 Boost's Filesystem library을 사용하면 훨씬 더 파일 시스템 관련 작업을 이식 할 수 있습니다.

1

먼저 무엇을 쓰고 있니?

  • Windows 인 경우 MSDN에서 FindFirstFileFindNextFile을 찾습니다.
  • POSIX 시스템 용 코드를 찾으려면 opendirreaddir 또는 readdir_r에 대해 man을 읽으십시오.
  • 크로스 플랫폼의 경우 Boost.Filesystem 라이브러리를 사용하는 것이 좋습니다. 디렉토리 처리에 대한하지만 단지 그것의 소금의 findfirst/findnext 기능이나 readdir되는 하나의 예를 같은 짐승이있을 것이다 가치가 어떤 OS에 대한 C에서 아무것도 또는 C++ 표준 자체가 없다
관련 문제