C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[5997] Re:[질문] fopen.. 파일을 열때...
박지훈.임프 [cbuilder] 3192 읽음    2001-03-10 01:57
소심남 님이 쓰신 글 :
: FILE *f = fopen("C:\\FileName", "w+" );
:
: 위와 같이 하면 C드라이브 루트에 있는 filename이라는 파일을 열수 있습니다.
: 헌데.. 저렇게 고정된 어느 한 파일을 열어보는 것이 아니라,
: 그 프로그램이 실행되는 폴더내의 file을 열려고 하려면 어떻게 하나요..?
:
: 예를 들어 실행 파일이
: c:\Program files\Launch\에 있거나
: c:\Utility\에 있거나 상관없이 그 폴더 내의 파일에 접근하려면
: 어떻게 하는지요..?
:


임펠리테리입니다.

죄송합니다만, 아래 박세용님의 답변에는 약간의 문제가 있군요.
프로그램이 있는 디렉토리와 현재 디렉토리는 다를 수도 있습니다. 예를 들면, 메모장은 일반적으로 윈도우즈 디렉토리에 있는데, 명령줄에서 아무 디렉토리에서나 notepad.exe라고 입력해도 실행이 되지요? 윈도우즈 디렉토리가 보통 디폴트 검색 패스(path 환경변수)에 포함되어 있기 때문에 당연합니다. 이런 경우, 윈도우즈 디렉토리가 실제 프로그램이 있는 디렉토리가 되고, 현재 디렉토리는 다른 곳일 수도 있습니다. 다른 예도 있습니다. 윈도우즈에서는 보통 실행파일에 대해 단축아이콘을 만들어서 쓰는 경우가 많은데, 단축아이콘의 등록정보를 보시면 가리키는 원본 파일을 지정하는 외에 별도로 "시작 위치"를 지정할 수 있게 되어있습니다. 같은 디렉토리를 지정하는 경우도 많습니다만 필요에 따라 다른 디렉토리를 지정할 수도 있는데, 여기서 "시작 위치"가 바로 탐색기가 해당 프로그램을 실행시킬 때 현재 디렉토리로 설정해주는 것입니다. 그러므로 이 두가지 위치가 다르게 지정된 경우에는 역시 프로그램이 있는 디렉토리와 현재 디렉토리가 달라집니다.

확실한 해결책은 하나 뿐입니다. 윈도우즈에서 모든 프로그램이 실행되면 인자를 하나도 넘겨주지 않아도 첫번째 인자로서 그 프로그램 자체의 패스가 넘어갑니다. 예를 들어, 그냥 "notepad" 라고 명령줄에서 입력하더라도 notepad.exe로는 "c:\windows\notepad.exe"라는 하나의 인자가 넘어가게 됩니다. 그러므로, 프로그램 자체로 넘어온 인자들 중 첫번째 것에서 프로그램이 있는 디렉토리를 추출해낼 수 있습니다.

원래 프로그램 자체애 대한 인자(명령프롬프트의 인자)는 프로그램의 엔트리포인트인 WinMain() 함수의 인자로 넘어오게 됩니다. 그런데 빌더에서는 보통 이 WinMain() 함수가 자동 생성된 코드로 되어 있어 다루기가 좀 귀찮습니다. 그래서 VCL에서 추가로 제공해주는 함수가 바로 ParamStr()입니다. 이 함수에 몇번째 인자를 알아내고 싶은지 인덱스를 넘기면 해당 번째의 인자를 돌려줍니다. 또한 파일이름을 포함한 전체 패스에서 디렉토리만 추출하고 싶은 경우에는 ExtractFilePath() 함수를 이용할 수 있습니다.

이유를 설명하느라 좀 썰이 길어졌는데.. 실제 방법은 아주 간단합니다. 다음의 한 라인이면 충분하지요.
AnsiString ProgramPath = ExtractFilePath(ParamStr(0));

그럼 참고하시길...

+ -

관련 글 리스트
5974 [질문] fopen.. 파일을 열때... 소심남 2328 2001/03/09
5997     Re:[질문] fopen.. 파일을 열때... 박지훈.임프 3192 2001/03/10
5979     Re:[질문] fopen.. 파일을 열때... 박세용 3167 2001/03/09
5980         Re:Re:[질문] fopen.. 파일을 열때... 소심남 2504 2001/03/09
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.