절대 경로와 상대 경로는 이야기를 많이 들어보셨을 거에요. 이는 어디를 기준으로 잡느냐에 따라서 차이가 나는데요. 간단하게 실습을 한 번 해 봅시다.

 

 

 먼저, C 폴더 밑에 있는 User 밑에 있는 cho 폴더를 보면, gahui와 gahui2가 있어요. 여기에는 어떤 녀석들이 들어가 있는지 봅시다. 먼저 gahui에 들어가 봅시다.

 

 

 그러면 a.c와 실행파일 a가 있어요. 그리고 폴더 f에 들어가 봅시다.

 

 

 그러면 왠 1.txt가 있는 것을 볼 수 있는데요. 이 파일을 한 번 열어봅시다.

 

 

 그러면 "abcde"라는 문자열 1줄이 있는 것을 볼 수 있습니다.

 

 

 그 다음에, cho 밑에 있는 또 다른 폴더인 gahui2를 열어봅시다. 이 안에도 1.txt가 있는데요.

 

 

 여기에는 저 이름이 내 개라는 문자열이 쓰여져 있습니다. 여러분이 이 6개의 그림을 쭉 보시면서, gahui로 들어갔을 때, 그리고 f라는 폴더로 들어갔을 때, 경로들을 보았을 거에요. 맨 위에 있었습니다. 이는 드라이브 C 안에 있는 User 안에, 그리고 Cho 안에 있는, ... 이런 식으로 적혀져 있었을 텐데요.

 

 Root로부터 들어온 것이 보이시나요? 이를 절대 경로라고 합니다. 제가 Download 폴더 안에 메이플 폴더 안에 들어갔습니다. 그러면, "abcde"라는 문자열이 저장되어 있는 1.txt의 위치가 바뀔까요?

 

 

 제가 "abcde"라는 녀석을 다른 곳으로 이동시키지 않는 이상, 논리적인 위치는 바뀌지 않을 겁니다. 즉, 루트로부터 C로 간 다음에 User로 간 다음에 Cho로 간 다음에 f로 가면 "abcde"가 적혀져 있는 텍스트 파일인 1.txt가 나타난다는 것입니다.

 

 


 반면에 상대 경로는 이야기가 달라요. 현재 내 위치를 기준으로, 경로를 잡는 겁니다. 폴더들의 구조를 다음과 같이 간략화 할 수 있다고 해 봅시다. 

 

 그러면 f 밑에 "abcde"가 저장되어 있는 녀석이 있었고, gahui2 밑에 "~ is my dog" 라는 것이 저장되어 있는 녀석이 있었습니다. 저는 여기서 gahui 라는 폴더를 제 위치로 삼을 거에요.

 

 

 그러면 gahui까지 들어오려면, 루트로부터 C를 거쳐서 User를 거쳐서 Cho를 거쳐서 제 개 이름이 적혀져 있는 폴더로 들어와야 할 거에요. 이를 우리는 절대 경로라 했었습니다. 루트로부터 어느 지점까지 오는 경로는 유일합니다. 왜냐하면, 디렉토리는 트리 구조로 표현이 될 수 있기 때문입니다.

 

 

 그런데, 제가 현재 있는 위치는 gahui였습니다. 노란색으로 칠한 부분입니다. 여기서, "abcde"가 있는 1.txt로 가려면 어떻게 가면 좋을까요? 제가 현재 있는 위치로부터 f로 들어가 다음에 1.txt를 열면 될 겁니다. 즉, 제가 노란색 위치에 있을 때, "abcde"가 저장되어 있는 텍스트 파일의 상대 경로는 f\1.txt인 셈입니다.

 

 

 이제 gahui2에 있는 1.txt에 접근하려면 어떻게 해야 할까요? 일단, gahui로부터 상위 폴더로 이동해야 해요. 이것은 .. 으로 할 수 있어요. 다음에 거기서부터 g2로 들어온 다음에, 1.txt를 열면 됩니다. 즉, "~ is my dog"가 저장되어 있는 파일의 상대 경로는 ../gahui2/1.txt입니다.

 

 


 fopen은 2개의 인자를 받는 함수입니다. 첫 번째는 경로, 2번째는 여는 모드를 받습니다. 경로는 상대, 절대 둘 다 될 수 있습니다. 5번째 줄을 봅시다. 저는 어떤 path를 넣었나요?

 

 

 딱 봐도 절대는 아닌 거 같아요. 그러면 현재 a.c라는 파일이 있는 폴더가 기준점인 거에요. 거기서부터, 가는 상대 경로를 넣어준 거에요. 그러면 gahui 밑에 있는 f 폴더 아래에 있는 1.txt를 열겠네요.

 

 

 그러면 abcde가 출력이 될 거에요.

 

 

 이렇게 작성하면 어떤가요? ..은 상위 폴더로 가라는 건데요. cho라는 폴더로 갑니다. 그 밑에 2개가 있었는데, 저는 그 중에 g2로 갔습니다. 그 밑에 1.txt라는 또 다른 파일이 있었는데요. 이것은 "~ is my ~" 라는 내용을 담고 있었습니다.

 

 

 따라서 그 내용이 출력됩니다. 그러면, 제가 다른 위치로 이동하면, 해당 파일의 상대 path는 바뀌겠네요. 보통 프로젝트를 보시다 보면, 플젝 밑에 이미지 폴더가 있고, src가 있고 이런 것을 많이 보셨을 텐데요. 플젝의 홈 디렉토리를 기준으로 path가 들어갔기 때문에 상대 경로로 보시면 됩니다.