반응형
scandir을 이용하여, 파일리스트와 폴더리스트를 불러오는 방법이다
필수적으로,
참고 Link
fstat : http://codewiki.wikidot.com/c:system-calls:fstat
s_islnk: http://www.freepascal.org/docs-html/rtl/oldlinux/s_islnk.html
요구 include Files
{
/* Scan directory */
struct dirent** pp_item;
struct stat fstat;
// scandir 함수를 이요해서 파일과 디렉토리 내용을 가져온다
long_t item_cnt = scandir(".", &pp_item, NULL, alphasort);
/* Count files */
long_t file_cnt = 0;
//파일 개수만큼 loop를 돌린다.
for(long_t i = 0; i < item_cnt; i++) {
//현재 폴더와 이전폴더는 무시하고
if(!strcmp(pp_item[i]->d_name, ".") || !strcmp(pp_item[i]->d_name, "..")) continue;
lstat(pp_item[i]->d_name, &fstat);
//Regular file과 Simbolic Link file일 경우
if(S_ISREG(fstat.st_mode) || S_ISLNK(fstat.st_mode)) file_cnt++;
}
/* Allocate memory */
str_t* pp_list;
pp_list = new str_t [file_cnt];
/* Copy the filenames to list */
long_t index = 0;
for(long_t i = 0; i < item_cnt; i++) {
if(!strcmp(pp_item[i]->d_name, ".") || !strcmp(pp_item[i]->d_name, "..")) {
free(pp_item[i]);
continue;
}
lstat(pp_item[i]->d_name, &fstat);
if(S_ISREG(fstat.st_mode) || S_ISLNK(fstat.st_mode)) {
pp_list[index] = new char_t [strlen(pp_item[i]->d_name) + 1];
strcpy(pp_list[index], pp_item[i]->d_name);
index++;
}
free(pp_item[i]);
}
free(pp_item);
list = pp_list;
return file_cnt;
}
필수적으로,
참고 Link
fstat : http://codewiki.wikidot.com/c:system-calls:fstat
s_islnk: http://www.freepascal.org/docs-html/rtl/oldlinux/s_islnk.html
요구 include Files
#include <unistd.h>long_t getFileList(const str_t dir, str_t*& list)
#include <sys/stat.h>
#include <sys/types.h>
#include <dirent.h>
{
/* Scan directory */
struct dirent** pp_item;
struct stat fstat;
// scandir 함수를 이요해서 파일과 디렉토리 내용을 가져온다
long_t item_cnt = scandir(".", &pp_item, NULL, alphasort);
/* Count files */
long_t file_cnt = 0;
//파일 개수만큼 loop를 돌린다.
for(long_t i = 0; i < item_cnt; i++) {
//현재 폴더와 이전폴더는 무시하고
if(!strcmp(pp_item[i]->d_name, ".") || !strcmp(pp_item[i]->d_name, "..")) continue;
lstat(pp_item[i]->d_name, &fstat);
//Regular file과 Simbolic Link file일 경우
if(S_ISREG(fstat.st_mode) || S_ISLNK(fstat.st_mode)) file_cnt++;
}
/* Allocate memory */
str_t* pp_list;
pp_list = new str_t [file_cnt];
/* Copy the filenames to list */
long_t index = 0;
for(long_t i = 0; i < item_cnt; i++) {
if(!strcmp(pp_item[i]->d_name, ".") || !strcmp(pp_item[i]->d_name, "..")) {
free(pp_item[i]);
continue;
}
lstat(pp_item[i]->d_name, &fstat);
if(S_ISREG(fstat.st_mode) || S_ISLNK(fstat.st_mode)) {
pp_list[index] = new char_t [strlen(pp_item[i]->d_name) + 1];
strcpy(pp_list[index], pp_item[i]->d_name);
index++;
}
free(pp_item[i]);
}
free(pp_item);
list = pp_list;
return file_cnt;
}
반응형
'Software > Programming' 카테고리의 다른 글
[MFC] Dialog를 내부 드래그로 창위치 옴기기 (0) | 2011.11.24 |
---|---|
[MFC] Dialog 테두리만 있고 투명한 다이얼로그 만들기 (0) | 2011.11.24 |
[C언어] 파일 입출력 함수 사용 (0) | 2011.11.24 |
[C언어] 대문자 소문자 변환 프로그램 예제 (0) | 2011.11.24 |
[C] -X 형태의 옵션이 들어간 형태의 코드 작성 (0) | 2011.11.24 |