뽀뽀중 님이 쓰신 글 :
: 답변 감사 드립니다.
:
: 폴더에 공백이 있을 경우 따옴표로 감싸면 실행파일 경로에 공백이 있을 경우도 도스 프로그램이 실행되는 것을 검색을 통해 알게 되었습니다.
:
: 이부분도 테스트를 해 보았습니다만,,, 입력파일 경로에 공백이 있는 경우 "" 로 감싼 경우도 에러가 발생 했습니다.
: 이 부분도 제 질문글에 설명을 하였습니다.
:
: 도스에서 직접 몇몇 경우에 대해 테스트를 했는데,,,
: 실행할경우는 ""로 감싼 경우는 경로에 공백이 있어도 실행이 되었습니다.
: 다만, 입력파일 경로는 공백이 있을 경우 "" 로 감싸도 에러가 발생하였습니다.
:
: 아마도 도스 프로그램이 포트란으로 1998년경 제작된 프로그램이라 입력자료 경로에 공백이 있을경우 공백을 무시하는 것 같습니다.
: 즉, 오류 수정이 불가능할것 같아... 입력파일 경로에 공백이 있으면, 경고 메세지를 보여 주는 것으로 변경 하였습니다.
:
: 프로그래밍을 누군가에게 배워본적 없이 인터넷 검색만으로 해결하다 보니,
: 기초가 많이 부족 합니다. 많은 이해 부탁 드립니다.
:
: 답변이 많은 도움이 되고 있습니다. 감사 합니다.
답변:
wchar_t *cmdLine = L"\"C:\\Some Directory\\Test.exe\"";
위와 같이 패스 경로에 공백이 있을 경우 쿼테이션 마크를 주므로써 처리가 가능 하죠?
Test.exe 라는 콘솔모드 프로그램이...
int main(int argc, wchar_t **argv)
{
for (int i = 0; i < argc; ++i)
printf("%s\n", argv[i]);
_gettche();
return 0;
}
위와 같이 프로그램에 전달된 코맨드 라인 옵션을 프린트 한다고 해 봅시다.
그리고...
Test.exe 프로그램에...
"C:\\User Dir"
와 같이 공백이 들어있는 패스경로를 커맨드라인 옵션으로 CreateProcess() API를 이용해서 전달 하려면...
마찬가지로 아래와 같이 쿼테이션 마크를 넣어주면 되요.
wchar_t *cmd = L"\""\"C:\\Some Directory\\Test.exe\\" \"C:\\User Dir\"";
STARTUPINFO si = { sizeof(si), 0};
PROCESS_INFORMATION pi = {};
bool b = CreateProcess(0, cmd, 0, 0, false, 0, 0, 0, &si, &pi);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
Test.exe 콘솔모드 프로그램은
argv 첫번째 인수로 Test.exe 프로그램의 full-path 를 프린트 할 것이고
두번째 파라미터로 공백이 포함된 커맨드 라인 옵션을 하나의 옵션으로 인식해서 'C:\User Dir' 를 프린트 할 것임.
콘솔모드 프로그램이냐 아니냐의 차이 때문이 아님.