디렉토리에 주어진 확장자가있는 파일 수를 계산합니다 -C ++?
-
20-09-2019 - |
문제
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 라이브러리를 사용하는 것이 좋습니다.
제휴하지 않습니다 StackOverflow