2016-07-22 2 views
3

텍스트 북에서 연습을 복제하려하지만 파일이 읽히지 않으므로 if 문이 실행되어 파일을 읽지 못했음을 알립니다. 오류 메시지 나 경고가 없습니다. 나는 근본적인 것을 놓치고있는 것이 틀림 없다고 확신하지만, 단지 그것이 무엇인지 알지 못한다. ... Qt를 사용하여 OSX, Clang7.0을 실행 중이다. (그러나 이것 역시 숭고한 텍스트에서 시도해 봤지만 실패했다.C++ 기본 파일 I/O, 읽지 못함

#include <fstream> 
#include <iostream> 

using namespace std; 

int main() 
{ 
    ifstream file_reader ("myfile.txt"); 
    if (!file_reader.is_open()) 
    { 
     cout<<"Could not open file!"<<'\n'; 
    } 
    int number; 
    file_reader >> number; 
    cout<<number; 
} 

파일은 프로그램 파일과 같은 디렉토리에 있습니다) 여기

는 코드입니다. 그것은 단순히 포함 .txt 인 파일입니다 : 내가 전체 경로를 퍼팅 시도와 일부 유사한 스레드를 살펴 있었다

12 a b c 

하지만 대한 this

감사와 같은 문제가 될 것 같습니다하지 않습니다 사전에 도움이 필요합니다.

+0

우분투 12.04에서 gcc 버전 4.6.4를 사용하여 잘 작동합니까? 실행 파일과 동일한 디렉토리에 txt 파일이 있습니까? – Jonas

+0

그것은 Linux에서 나를 위해 작동합니다. 출력 문장에'<< std :: endl'을 추가하고 무슨 일이 일어나는지 확인하십시오. – GMichael

+0

자세한 정보를 제공해주십시오. 출력은 무엇입니까? 디버깅을 시도 했습니까? if body와 main 함수의 끝에서 반환의 부족 이외에 코드는 괜찮아 보입니다. – stryku

답변

2

많은 IDE가 다른 디렉토리에서 프로그램을 컴파일하지만 일반적으로 필요한 파일을 동일한 위치로 복사하는 방법도 제공합니다. Xcode가 중요합니다. 프로그램이 어디서 만들어 졌는지 알아 내면 그 디렉토리에 myfile.txt을 넣고 프로그램을`./myprogram '이라고 부르면 코드가 작동합니다.

프로그램이 실행중인 디렉토리를 확인하려면 getenv("PWD")을 사용하여 작업 디렉토리를 찾은 다음 필요한 작업을 수행 할 수 있습니다. 당신이 발견으로

#include <fstream> 
#include <iostream> 

using namespace std; 

int main(int argc, char* argv[]) 
{ 
    cout << "PWD = " << getenv("PWD") << endl; // Inspect working directory 

    ifstream file_reader ("myfile.txt"); 
    if (!file_reader.is_open()) 
    { 
     cout << "Could not open file!" << endl; 
     return -1; // If the file wasn't opened, there's no point in going on 
    } 
    int number; 
    file_reader >> number; 
    cout << number << endl; 
    return 0; // Always return 0 from main() if successful 
} 

, OS X에 Documents/Users/myusername과 같이 될 것이다, 홈 디렉토리에 살고있다. 경로 나 파일 이름에 공백이나 특수 문자가 포함되어 있지만 프로그램 내부에서 필요하지 않은 경우 (즉, ifstream() 초기화) 셸에서 인수가 해석되지 않으므로 셸에서 큰 따옴표가 필요합니다. ~도 쉘에 의해 해석되지만 표준 라이브러리 나 커널에서는 해석되지 않으므로 프로그램에서 사용하는 것이 작동하지 않습니다. ~/은 디렉토리 이름이 아닙니다.

+0

정확히 getenv ("PWD ") 출력 된 가정합니다. (그렇지 않으면 좋은 대답) –

+0

'PWD'는 현재 작업 디렉토리의 환경 변수입니다.이 코드를'/ home/josh' 디렉토리에서 실행하면'getenv ("PWD")'는'/ home/josh'를 반환 할 것입니다. "내 프로그램이 엉망이라고 말하면"프로그램이 segfaults라고 말하고 있습니까? 그렇다면 여러분은 지나가고 있지 않은 IDE 내부에서 이것을 실행하고 있다고 가정합니다 어떤 IDE를 사용하고 있습니까? –

+0

어떤 환경 변수가 프로그램에 전달되는지보고 싶다면'int main (int argc, char * argv [], char ** env) {while (* env) std :: cout << * env ++ << std :: endl; return 0;}'. –

관련 문제