2010-03-22 7 views
3

을 읽고 난 다음 코드가 : 파일이 개방되지C에서 스트림 ++

ifstream initFile; 
    initFile.open("D:\\InitTLM.csv"); 
    if(initFile.is_open()) 
    { 

     // Process file 

    } 

합니다. 파일이 D : 드라이브에 있습니다. 이 파일을 찾을 수없는 이유를 정확히 알 수있는 방법이 있습니까? "errno"처럼? 여기 답변

+1

먼저 프로그램 디렉토리에 InitTLM.csv를 놓고 드라이브 문자를 참조하는 대신 initfile.open ("inittlm.csv");을 수행 할 수 있습니까? 그런 다음 오류가 계속 발생하면 알려주십시오. – JonH

+1

seporator로 '\'를 사용하지 마십시오. 이스케이프 문자이므로 다른 수준의 코드를 코드에 추가합니다. 당신은 '\\'을 의미 했습니까? 아니면 '\\\\'을 의미 했습니까? Windows는 Windows XL 이후로 디렉토리 seporator로 '/'를 수락했습니다. 그것을 사용하면 우리가 대답 할 필요가없는 질문의 레이어를 제거 할 수 있습니다. –

답변

1

OS의 기본 오류보고 메커니즘을 사용하여 이유를 얻을 수 있어야합니다 (표준 라이브러리는 OS 프리미티브에 기반하기 때문에). 코드는 이식 할 수 없지만 문제의 맨 아래로 이동해야합니다. Windows를 사용하는 것으로 나타 때문에

, 당신은 텍스트 설명으로 변환하는 원시 코드와 FormatMessage를 얻을 수 GetLastError을 사용합니다.

0

STL은이보고 오류에없는 중대하다. 다음은 표준 내에서 할 수있는 최선의 방법 : 내 경험에

 ifstream initFile; 
    initFile.exceptions(ifstream::eofbit|ifstream::failbit|ifstream::badbit); 
    try 
    { 
     initFile.open("D:\\InitTLM.csv"); 
     // Process File 
    } 
    catch(ifstream::failure e) 
    { 
     cout << "Exception opening file:" << e.what() << endl; 
    } 

, 일반적으로 쓸모가 무엇을()에 의해 반환되는 메시지는.

0

D : 드라이브의 루트에서 사용 권한을 확인하십시오. 컴파일 된 실행 파일 또는 디버거가 실행중인 서비스에 해당 파일을 여는 데 필요한 충분한 액세스 권한이 없다는 것을 알 수 있습니다.

D : \ root 디렉터리의 사용 권한을 일시적으로 "Everyone -> 모든 권한"으로 변경하고 문제가 해결되는지 확인하십시오.