2010-12-07 8 views
0

*recipient 형식의 파일이 디렉토리에 있는지, 파일 이름이 있는지 확인해야합니다. opendir()readdir()을 사용하여 디렉토리의 각 파일을 나열하고 비교하려고했지만 많은 파일이있는 경우 시간이 오래 걸립니다.부분 이름 만있는 디렉토리에 파일이 있는지 확인하십시오.

더 좋은 방법이 있나요? 그렇다면이 작업을 수행하는 작은 스 니펫이 있습니까?

고맙습니다. 코드를 사용해 주셔서 감사합니다.

편집 : 그 이름의 파일이 다음 내가 필요한 존재하는 경우, 내가 recipient에서 끝나거나 내가 ls를 사용한다면, 그렇지 않으면 *recipient을 넣어 모든 파일에 대한 디렉토리를 확인해야

그냥 더 명확하게하기 그 이름을 얻으려고.

답변

2

루틴 glob은 사용자가 원하는 것을 수행합니다. 사용 예는 여기에 사용할 수 있습니다 여기에 http://www.opengroup.org/onlinepubs/009695399/functions/glob.html

는 당신이 필요로하는 무엇을 얻어야한다 전체 예제 :

#include <glob.h> 
#include <stdio.h> 

int main(int argc, char **argv) 
{ 
    glob_t globbuf; 

    glob("*recipient", 0, NULL, &globbuf); 

    if (globbuf.gl_pathc == 0) 
     printf("there were no matching files\n"); 
    else 
     printf("the first of the matching files is: %s\n", globbuf.gl_pathv[0]); 

    globfree(&globbuf); 

    return 0; 
} 
+0

감사. 내 이전 댓글을 참조하십시오. –

+0

고맙습니다. 나는 그 예를 고맙게 생각한다. –

2

당신은 이것을 위해 glob(3)을 원합니다.

+0

감사합니다, 올바른 방향 것 같다, 그러나 나는 어떻게받을 수 있나요 파일 이름 또는 존재하는 경우에도? 모든 예제에서 나는 많은 다른 문자열이 설정되고 궁극적으로'ls'가 호출되거나 다른 유틸리티가 있음을 발견합니다. –

+1

'glob '은이 방법의 본래의 느린 점을 해결하는 데 아무런 역할을하지 않는다는 것을 알아야합니다. 내부적으로는'readdir'에서 반복됩니다. –

+0

@Mr :'ls'는 각 결과를 차례대로 보여주기 위해 호출되지만, glob()는 여전히 작업을 수행하고 있습니다. –

관련 문제