본문 바로가기
프로그래머의 길/C & C++

디렉토리 관련 함수

by 제이콥케이 2007. 4. 9.
반응형

#include <stdio.h>
#include <string.h>
#include <direct.h>

int main()
{
 char dir[256];
 int ret = 0;
 FILE *fp;
 
 ret = chdir("C:\\test");           // test라는 디렉토리가 있으면 0, 없으면 -1을 리턴함.
 if(ret == -1)                             // test라는 디렉토리가 없을경우
        mkdir("C:\\test");            // test 디렉토리 생성
 else {                                        // test라는 디렉토리가 있을경우
        chdir("C:\\test");              // test 디렉토리로 이동
        fp = fopen("test.txt","wt");    // test.txt파일 open
        if(fp){
                fprintf(fp,"This is a test file.");
                fclose(fp);
        }
 }

 return 0;
}



폴더가 있는지 없는지의 체크는 위처럼 _chdir()의 리턴값을 조사하면
되는데, 존재하지 않을 때 어차피 새로 생성해야 할 거라면 리턴값 무시하고
그냥 _mkdir()를 사용하시면 된다(실행 상 아무 문제 없음).
_mkdir()은 한번에 한 폴더만 생성한다. 그래서 여러 레벨의 경로를 한꺼번에
생성하는 함수 예(make_path)를 아래에 보였습니다. 경우에 따라선 유용하게
사용하실 수 있다.

#include <stdio.h>
#include <string.h>
#include <direct.h>

void make_path(const char *full_path);
void main()
{
    make_path("C:\\test\\bbb\\test.txt");
}

void make_path(const char *full_path)
{
    char temp[256], *sp;

    strcpy(temp, full_path);    // 경로문자열을 복사
    sp = temp;                  // 포인터를 문자열 처음으로
    while((sp = strchr(sp, '\\'))) {    // 디렉토리 구분자를 찾았으면
        if(sp > temp && *(sp - 1) != ':') { // 루트디렉토리가 아니면
            *sp = '\0';         // 잠시 문자열 끝으로 설정
            _mkdir(temp);       // 디렉토리를 만들고 (존재하지 않을 때)
            *sp = '\\';         // 문자열을 원래대로 복귀
            }
        sp++;                   // 포인터를 다음 문자로 이동
        }
}

반응형