2016-08-25 3 views
0

상대 경로에 대한 몇 가지 항목을 읽었지만 답변없이 몇 시간 동안 방황했습니다. 코드는 다음과 같다 :상대 경로에 "../xx.txt"를 추가하면 C++에서 작동합니다.

std::string path = "./Debug/"; 
path.append("../hi.txt/"); 
std::ifstream inFile(path); 
std::string str; 
if (inFile.is_open()) 
{ 
    inFile >> str; 
    std::cout << str << std::endl; 
} 
else 
{ 
    std::cout << "open failed" << std::endl; 
} 

이 코드가 출력됩니다 : "열기 실패". 도움이 될 것입니다.

+3

정말 하위 디렉토리 hi.txt 있습니까? 그렇지 않다면 뒤에 슬래시를 넣지 마십시오. –

+0

나는 –

답변

4

경로 끝에 /을 넣으면 시스템이 디렉토리로 실행하도록 지시합니다 (예 : 내용을 나열). hi.txt은 디렉토리가 아니므로 디렉토리로 실행할 수 없으므로 실패합니다 (물론 디렉토리 이름을 hi.txt으로 가정하지 않은 경우).

를 해결하려면 제거가 / :

std::string path = "./Debug/" ; 
path.append("../hi.txt") ; 
+0

을 "실행"하여 "열기"를 의미합니다. –

+0

@ M.M 반드시 그렇지는 않습니다. 기호 링크는 재미있는 사업을 추가합니다. 나는 리눅스가 디렉토리 (그리고 디렉토리에 대한 심볼릭 링크)를 실행 플래그를 설정하는 것으로 부르는 방법을 언급하고있다. '/ path/to/a'가'/ path/to/b' 디렉토리에 대한 심볼릭 링크 인 경우,'ls -la/path/to/a'는 심볼릭 링크에 대한 정보를 제공하지만'ls- la/path/to/a /'는'ls -la/path/to/b /'와 같은 출력을 파일 시스템과 같은 것으로 "실행"하고 정확한 디렉토리로 해석하기 때문에 출력을 줄 것이다. 그러나 단순한 용어로, 그것은 절대적으로 "개방 된"조작입니다. – iAdjunct