문제

C ++에서 디렉토리에 주어진 확장자가있는 파일 수를 계산할 수 있습니까?

나는 이와 같은 일을하는 것이 좋을 프로그램을 작성하고있다 (pseudo-code) :

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

분명히,이 프로그램은 훨씬 더 복잡하지만, 이것은 내가하려는 일에 대한 일반적인 아이디어를 제공해야합니다.

이것이 불가능하다면, 그냥 말해줘.

감사!

도움이 되었습니까?

해결책

C 또는 C ++에는 아무것도 없습니다 표준 디렉토리 취급에 대해서는 그 자체로 소금 가치가있는 OS에 대해서는 그와 같은 짐승이있을 것입니다. 한 가지 예는 다음과 같습니다. findfirst/findnext 기능 또는 readdir.

당신이 할 수있는 방법은 해당 함수에 대한 간단한 루프이며, 원하는 확장을 위해 반환 된 문자열의 끝을 확인합니다.

같은 것 :

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 특정 기능입니다.

유닉스에게는 거의 확실히 사용하는 것입니다. opendir, readdir 그리고 폐쇄. 이 코드는 다음과 같은 좋은 출발점입니다.

#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);
}

다른 팁

이러한 종류의 기능은 OS 관련이므로이를 수행하는 표준적이고 휴대용 방법이 없습니다.

그러나 사용 부스트의 파일 시스템 라이브러리 이를 수행 할 수 있으며 휴대용 방식으로 훨씬 더 많은 파일 시스템 관련 작업을 수행 할 수 있습니다.

우선 무엇을 위해 글을 쓰고 있습니까?

  • Windows라면 찾으십시오 FindFirstFile 그리고 FindNextFile MSDN에서.
  • POSIX 시스템의 코드를 찾고 있다면 읽으십시오. man ~을 위한 opendir 그리고 readdir 또는 readdir_r.
  • 크로스 플랫폼의 경우 boost.filesystem 라이브러리를 사용하는 것이 좋습니다.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top