250x250
꾸준희
Enough is not enough
꾸준희
전체 방문자
2,319,279
오늘
213
어제
774

공지사항

  • 꾸준희 블로그
  • 분류 전체보기 (580)
    • 생각 (14)
    • Book Review (38)
    • Paper Review (18)
    • Research Topic (126)
      • Deep Learning (24)
      • Pose Estimation (29)
      • Object Detection (22)
      • Object Segmentation (3)
      • Object Tracking (11)
      • Video Surveillance (4)
      • Action Recognition (6)
      • Stereo Vision (6)
      • 3D Reconstruction (4)
      • Machine Vision (2)
      • Image Processing (11)
      • Dataset (4)
    • Development (76)
      • NVIDIA DeepStream (3)
      • NVIDIA TensorRT (30)
      • NVIDIA TAO Toolkit (2)
      • ONNX (8)
      • PyTorch (5)
      • TensorFlow (15)
      • TensorFlow Lite (1)
      • GPU | CUDA | PyCUDA (12)
    • Programming (147)
      • GStreamer | FFmpeg (6)
      • Python (27)
      • C | C++ (15)
      • OpenCV (34)
      • Linux (36)
      • Embedded linux (7)
      • Etc. (22)
    • Computer Science (62)
      • 학부 및 대학원 과목 (22)
      • 선형대수학 및 기타 수학 (7)
      • SQL-D (33)
    • 삽질 기록 (49)
    • 기타 (50)
      • 참고자료 (30)
      • 좋은 글 (5)
      • 티스토리 (2)
      • 논문 작성 관련 참고 (10)
      • 메모 (0)

블로그 메뉴

  • 👀 CV
  • 🌸 GitHub
  • 💌 LinkedIn
  • 📚 방명록

최근 댓글

  • python으로 만든 코드를 이제 a⋯
    android 초보
  • cannot resolve symbol 'type'⋯
    android 초보
  • 정확히 뭐라고 뜨나요?
    꾸준희
  • 앗 ㅠ 제가 오랜만에 스킨을 바⋯
    꾸준희
  • 선생님 ㅜㅠ 각도 계산하는 부⋯
    android 초보
07-04 08:58

티스토리

hELLO · Designed By 정상우.
꾸준희

Enough is not enough

Programming/C | C++

[C] 파일 목록 가져오기

2018. 8. 16. 16:59
반응형



파일 검색 함수는 특정한 조건에 맞는 파일을 검색한다. 예를 들어 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  (0) 2018.08.29
[C] 포인터  (0) 2018.08.21
[C] 파일 목록 가져오기  (2) 2018.08.16
[C++] 전처리문의 종류  (0) 2018.08.05
[C++] STL 정리  (0) 2018.08.05
[C] 비주얼스튜디오2013 scanf 오류 해결법  (0) 2015.11.02
    'Programming/C | C++' 카테고리의 다른 글
    • [C] printf 출력형식 %d %i %u %X %x %o %p %s %c %C %f %e %E %g %G
    • [C] 포인터
    • [C++] 전처리문의 종류
    • [C++] STL 정리
    꾸준희
    꾸준희
    생각과 기록 그리고 발전
    댓글쓰기
    1. jongphago
      2020.12.01 22:48
      windows10 VS2019 .c 확장자 에서는 _finddatat_t를 선언할때 앞에 struct를 붙여야 선언이 되는것 같습니다.

      ...
      struct _finddata_t fd;
      ...

      도움주셔서 감사합니다.
      수정/삭제댓글쓰기댓글보기
      1. 꾸준희
        2020.12.01 22:49 신고
        감사합니다 ^^
        수정/삭제
    다음 글
    [C] 포인터
    이전 글
    [C++] 전처리문의 종류
    • 이전
    • 1
    • ···
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 다음

    티스토리툴바