Thursday, December 07, 2006
C언어 VC++] 디렉토리 이동, 현재 작업 디렉토리 변경, 옮기기, Change Directory, _chdir()
비주얼C++에서, "현재 작업 디렉토리(Current Working Directory)"를 변경하는 방법입니다.
_chdir() 함수를 사용하는데, 그렇지만 프로그램을 종료하면, 프로그램을 시작했던 디렉토리로 돌아갑니다. 즉, 프로그램 내부에서만 변경될 뿐, 완전히 변경되지는 않습니다.
소스 파일명: 0.cpp
"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 인 상태임)
참고로 위의 예제 소스에서, 디렉토리 변경에 실패했을 때에는 exit(1) 이렇게 프로그램을 종료하도록 했는데, 대부분의 경우, 디렉토리 변경 실패는 치명적인 에러가 아니므로 종료할 필요까지는 없습니다. 실제 프로그램에서는 exit(1)... 행을 지우고, 실패했을 때 실행할 적당한 코드를 작성해 주는 것이 좋습니다.
Visual C++ 2005 버전부터는 chdir() 대신에, _chdir() 을 사용해야 합니다.
▶▶ C언어 VC++] 현재 작업 디렉토리 이름 구하기, 현재 폴더명 얻는 함수, Current Folder Directory Name
_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;
}
#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>
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++)
<< Home