파일 검색 함수는 특정한 조건에 맞는 파일을 검색한다. 예를 들어 a로 시작하고 확장자가 txt 인 모든 파일(*.txt)을 찾아 작업을 하고자 할 때 조건에 맞는 파일을 찾아야 한다.
파일을 검색하는 함수는 다음과 같다.
long _findfirst( char *filespec, struct _finddata_t *fileinfo ); int _findnext( long handle, struct _finddata_t *fileinfo ); int _findclose( long handle );
findfirst 함수의 filespec 인수로 검색 식을 주면 조건에 맞는 첫번째 파일을 찾아
fileinfo 구조체에 검색된 파일의 정보를 채우고 검색 핸들을 리턴한다.
만약 조건에 맞지 않는다면 -1이 리턴된다.
_finddata_t 구조체는 <io.h> 헤더 파일에 정의되어있다.
struct _finddata_t { unsigned attrib; time_t time_create; /* -1 for FAT file systems */ time_t time_access; /* -1 for FAT file systems */ time_t time_write; _fsize_t size; char name[260]; }
파일의 속성, 이름, 날짜 크기 등에 대한 정보를 가지며
이 구조체를 참조하면 어떤 파일이 검색되었는지 알 수 있다.
_findfirst 함수로 첫 번째 검색을 한 뒤에 _findnext 함수로 조건이 일치하는 다음 파일을 계속 찾을 수 있다.
_findnext가 -1을 리턴할 때까지 반복하면 조건에 맞는 모든 파일을 다 찾게 된다.
검색이 끝나면 _findclose 함수로 검색 핸들을 닫으므로 검색을 종료한다.
다음은 C 드라이브 루트의 모든 파일을 검색하여 화면으로 출력하는 예제이다.
#include <Turboc.h> #include <io.h> void main() { _finddata_t fd; long handle; int result=1; handle=_findfirst(allPath.c_str(),&fd); if (handle == -1) return; while (result != -1) { printf("파일명 : %s, 크기:%d\n",fd.name,fd.size); result=_findnext(handle,&fd); } _findclose(handle); }
검색 함수로 서브 디렉토리까지 검색하려면 재귀 호출을 사용한다.
다음은 C++ 언어와 OpenCV 라이브러리를 활용하여
디렉토리 안의 여러 개의 파일을 imshow로 오픈하는 예제이다.
디렉토리 안에는 여러 장의 이미지 파일이 포함되어 있으며,
처음에는 첫번째 이미지에 대하여 일련의 영상처리 과정을 imshow 를 통해 띄워주며,
스페이스바(ASCII : 32)를 눌렀을 때 다음 파일에 대한 일련의 영상처리 과정을 imshow 하고,
디렉토리 안에 있는 모든 파일에 대하여 영상처리를 할 때 까지 반복하는 예제이다.
#include "detection.h" int main(int argc, char** argv) { string dirPath = "image/"; struct _finddata_t fd; intptr_t handle; int fileCheck = 1; string allPath = dirPath + "*.jpg"; handle = _findfirst(allPath.c_str(), &fd); // 파일 검색을 위한 핸들러 지정 while (fileCheck != -1) { // 디렉토리의 모든 파일 검색 Detection *sample= new Detection(); // 객체 생성 cout << dirPath + fd.name << endl; // 파일 경로 및 이름 확인 sample->OpenFile(dirPath + fd.name); while (waitKey(32) == -1); // 스페이스바를 누르면 한 이미지에 대한 영상처리 종료 delete sample; // 객체 소멸 destroyAllWindows(); // 한 이미지에 대한 윈도우 창 종료 fileCheck = _findnext(handle, &fd); // 다음 파일로 이동 } _findclose(handle); // 파일 검색 종료 return 0; }
참고자료 1 : http://soen.kr/lecture/ccpp/cpp2/17-4-2.htm
참고자료 2 : http://sks3297.tistory.com/entry
'Programming > C | C++' 카테고리의 다른 글
[C] printf 출력형식 %d %i %u %X %x %o %p %s %c %C %f %e %E %g %G (2) | 2018.08.29 |
---|---|
[C] 포인터 (0) | 2018.08.21 |
[C++] 전처리문의 종류 (0) | 2018.08.05 |
[C++] STL 정리 (0) | 2018.08.05 |
[C] 비주얼스튜디오2013 scanf 오류 해결법 (0) | 2015.11.02 |