컴퓨터 엑셀 워드 포토샵 구글어스 WINDOWS JAVASCRIPT JAVA C++

 
Thursday, December 07, 2006

C언어 VC++] 디렉토리 이동, 현재 작업 디렉토리 변경, 옮기기, Change Directory, _chdir()


비주얼C++에서, "현재 작업 디렉토리(Current Working Directory)"를 변경하는 방법입니다.

_chdir() 함수를 사용하는데, 그렇지만 프로그램을 종료하면, 프로그램을 시작했던 디렉토리로 돌아갑니다. 즉, 프로그램 내부에서만 변경될 뿐, 완전히 변경되지는 않습니다.


현재 디렉토리(폴더) 이동 예제: _chdir() Function Example


소스 파일명: 0.cpp
#include <stdio.h>
#include <stdlib.h>  // exit(), _MAX_PATH
#include <direct.h>  // _chdir()
#include <errno.h>


int main(void) {
  // 이동할 디렉토리명
  char s[] = "D:/Program Files";

  // 현재 디렉토리명 출력용 버퍼
  char currentPath[_MAX_PATH];




  // 프로그램 시작
  printf("현재 디렉토리: %s\n", _getcwd(currentPath, _MAX_PATH));

  if (_chdir(s)) {
    switch (errno) {
      case ENOENT:
        fprintf(stderr, "Unable to locate the directory: %s\n", s); break;
      case EINVAL:
        fprintf(stderr, "Invalid buffer.\n"); break;
      default:
        fprintf(stderr, "Unknown error.\n");
    }
    exit(1); // 에러 나면 프로그램 강제 종료
  }

  printf("변경 후 현재 디렉토리: %s\n", _getcwd(currentPath, _MAX_PATH));

  return 0;
}


"D:\Program Files"
이런 디렉토리를 문자열 상수(리터럴)로 표현하기 위해서는
"D:\\Program Files"
이렇게 백슬래쉬(\)를 이중으로 하여 이스케이프하든지,
"D:/Program Files"
또는 이렇게 유닉스 스타일의 패스로 기입합니다. (윈도우에서도 슬래쉬(/)를 패스 구분자로 쓸 수 있습니다.)

그렇지 않으면 D:\Pro... 에서 'P' 라는 평범한 글자를 이스케이프 시퀀스로 오인하여 다음과 같은 경고가 나오고 에러가 납니다: warning C4129: 'P' : unrecognized character escape sequence


그리고 디렉토리명 끝부분에 백슬래쉬를 붙이는 경우
"D:\\Program Files\"
이렇게 1개만 붙이면
error C2001: newline in constant
그리고
error C2144: syntax error : 'char' should be preceded by ';'
이런 에러가 납니다.




_chdir() 은 성공했을 때는 0, 실패했을 때는 -1을 반환합니다.

디렉토리 변경에 실패했을 때에는 다음과 같은 에러를 출력합니다:

Unable to locate the directory: D:/XYZ000
"그런 디렉토리로 이동할 수 없다"는 에러 (하드에 D:/XYZ000 라는 디렉토리가 없을 경우)

Invalid buffer.
는 디렉토리명이 빈 문자열이거나 잘못되었다는 에러

Unknown error.
그밖의 알 수 없는 기타 에러


위의 예제 소스 컴파일 및 실행 결과:
(현재 디렉토리가 D:\Z 인 상태임)
D:\Z>cl 0.cpp && 0.exe
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13.10.3077 for 80x86
Copyright (C) Microsoft Corporation 1984-2002. All rights reserved.

0.cpp
Microsoft (R) Incremental Linker Version 7.10.3077
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:0.exe
0.obj
현재 디렉토리: D:\Z
변경 후 현재 디렉토리: D:\Program Files

D:\Z>


참고로 위의 예제 소스에서, 디렉토리 변경에 실패했을 때에는 exit(1) 이렇게 프로그램을 종료하도록 했는데, 대부분의 경우, 디렉토리 변경 실패는 치명적인 에러가 아니므로 종료할 필요까지는 없습니다. 실제 프로그램에서는 exit(1)... 행을 지우고, 실패했을 때 실행할 적당한 코드를 작성해 주는 것이 좋습니다.


Visual C++ 2005 버전부터는 chdir() 대신에, _chdir() 을 사용해야 합니다.




▶▶ C언어 VC++] 현재 작업 디렉토리 이름 구하기, 현재 폴더명 얻는 함수, Current Folder Directory Name




tag: cpp
C언어 | C/C++ (Visual C++)

0 Comments:

Post a Comment

<< Home RSS 2.0 feed

구글 Google 에서 제공하는 무료 블로그 서비스인 블로거 Blogger 의 인터넷 주소는 www.blogger.com 입니다. Blogger 에 블로그를 만들면, blogspot.com 이라는 주소에 블로그가 생성됩니다.
블로그를 직접 방문하지 않고도 최신 게시물을 구독하려면 RSS 2.0 feed 주소를 리더기에 등록하시면 됩니다.
Previous Posts
Monthly Archives
Top