2015-01-27 8 views
5

fstream을 사용하여 파일을로드하려고합니다. 코드는 다음과 같습니다.fstream C++을 사용하는 상대 경로

file.open("../levels/level0.lvl"); 
if (file.is_open()) { 
    while (!file.eof()) { 
     std::getline(file, Str); 
     list = ReadLine(Str, list); 
    } 
} 

하지만 아무것도로드하지 않습니다. 경로가 절대 경로 인 경우에만 가능합니다. 경로를 상대 경로로 만들려면 어떻게해야합니까?

"levels"폴더는 디버그 폴더에서 호스팅됩니다. exe와 같은 폴더.

+2

상대 경로가 유효합니다. 당신의 * 활성 디렉토리 *를 실행 파일의 디렉토리 *와 혼동 할 수 있습니까? –

+0

당신 말이 맞아요. 이 어리석은 실수에 대해 고마워하고 미안합니다. – SaschaDeWaal

+2

@Beatnory _'while (! file.eof())'_ 또한주의해야합니다 : [** 루프 조건 내부의 iostream :: eof가 잘못된 이유는 무엇입니까? **] (http : //stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong) –

답변

6

"폴더"레벨 "은 디버그 폴더에서 호스팅되며 exe와 같은 폴더입니다." 그것은 중요하지 않습니다

은 위치에 levels 폴더는 실행 파일의 경로와 관련입니다.
상대 경로를 결정하는 관련 폴더는 실행 파일이 실제로 시작되는 작업 디렉터리입니다.


여기를 참조하십시오 : fstream doesn't resolve path.

0

경로 처리는 OS에 따라 다릅니다. 이를 처리하는 올바른 방법은 응용 프로그램에 대한 경로를 지정하는 사용자의 방법을 추가 한 다음 해당 경로를 사용하는 것입니다. 예를 들어, --level-file=<path> 명령 줄 옵션을 추가 할 수 있습니다. 그런 다음 프로그램은 해당 옵션에서 경로를 읽고이를 fstream 생성자에 전달할 수 있습니다.

자세한 내용은 내 대답을 참조하십시오. https://stackoverflow.com/a/40980510/2345997