문제

게임용 프로토 타입을 개발하고 있으며 특정 게임 플레이 규칙은 INI 파일로 정의되어 게임 디자이너가 다시 컴파일 외에 도움없이 게임 매개 변수를 조정할 수 있도록해야합니다. 이것이 제가 현재하고있는 일입니다.

std::ifstream stream;
stream.open("rules.ini");

if (!stream.is_open())
{
    throw new std::exception("Rule file could not be opened");
}

// read file contents here

stream.close();

그러나 내 스트림은 결코 성공적으로 열리지 않습니다. 디버깅 중에 STL 소스에 깊이 빠져들면 _getStream () (Stream.c에 정의 된대로)이 Null을 반환하는 것을 계속 유지하지만 이것이 왜 그런지 알 수는 없습니다. 도와주세요.

편집 : Rules.ini는 .exe 파일과 동일한 디렉토리에 있습니다.

도움이 되었습니까?

해결책

당신은 그것을 가정합니다 작업 디렉토리 실행 파일이있는 디렉토리입니다. 이것은 나쁜 가정입니다.

실행 파일은 모든 작업 디렉토리에서 실행할 수 있으므로 일반적으로 소프트웨어의 상대 경로를 하드 코딩하는 것은 나쁜 생각입니다.

실행 파일의 위치와 관련하여 파일에 액세스하려면 먼저 실행 파일의 경로를 결정하고 그로부터 완전히 자격을 갖춘 경로를 만들어야합니다.

검사하여 실행 파일의 이름을 얻을 수 있습니다. argv[0] 매개 변수가 전달되었습니다 main(). 또는 창문을 사용하는 경우 GetModuleFileName() NULL을 첫 번째 매개 변수로 전달함으로써.

다른 팁

오픈 스트림의 범위가 올바른 것입니다.

"RULING.INI"는 전체 경로가 아니므로 상대적이어야하므로 관련이 있어야합니다. 아니면 그곳에서 전체 경로를 사용해야합니까?

(여기서 와일드 가정) 당신은 Visual Studio를 사용하고 있습니다. 디버그 중에 프로그램은 "Rules.ini"에 대한 프로젝트 디렉토리를 검색합니다.

그러나 "myProject/debug/myexe.exe"에서 프로그램을 실행하려면 규칙에 대한 "/debug"를 검색 할 것이므로 잘 실행됩니다.

언급 된 것처럼 상대 경로는 오류로 이어지는 경향이 있으므로 전체 경로를 지정해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top