2016-08-29 3 views
0

저는 오늘 저녁에 매우 간단한 I/O 기능을 사용하려고 악몽을 꾸고있었습니다. 난처하게 여기는 사람들로부터 큰 도움을 받았습니다!ifstream.open() 파일을 열지 않음

현재 문제는 ifstream.open()을 사용하려고하는데 파일을 열지 않고 있다는 것입니다. 이것은 getline (ifstream, line)에 의해 확인됩니다. 첫 번째 호출에서 false를 반환합니다. 여기

는 현재 코드의 복사 붙여 넣기입니다 :

std::string FSXController::readLine(int offset, FileLookupFlag flag) 
{ 
    // Storage Buffer 
    string line; 
    streampos sPos(offset); 

    try 
    { 
     // Init stream 
     if (!m_ifs.is_open()) 
      m_ifs.open("C:\\Users\\guyth\\Documents\\test.txt", fstream::in); 
    } 
    catch (int errorCode) 
    { 
     showException(errorCode); 
     return ""; 
    } 

    // Set stream to read input line 
    m_ifs.seekg(sPos); 
    if (!getline(m_ifs, line)) 
     return ""; 

    // Close stream if no multiple selection required 
    if (flag == FileLookupFlag::single) 
     m_ifs.close(); 

    return line; 

} 

이 코드는 '버그 수정 모드'에 그렇게 때문에 꽤 지저분는, 그것에 대해 너무 많이 걱정하지 마십시오, 정리 때 발생합니다 이 방법은 마침내 효과가 있습니다.

이 나는 ​​시도했다 :

  • 절대 파일 경로
  • 가 문자열로 경로를 저장하고 .c_str() 메서드를 호출. 파일을 보장 관리자 모드
  • 에서 VS 2015를 실행
  • 는/라이트에게 접근
  • 중복 파일 확장자
  • 예 파일이 확실히 내용이 없는지 확인을 읽기! : D

저는 지금 아이디어가 좀 모자라서 왜이 파일이로드를 거부하는지 잘 모르겠습니다.

조건 : 그냥 바로 오픈 후 m_ifs.fail()을 확인 시도하고 그것은 사실 반환, 그래서 우리는 실패 플래그가 트리거 된 알 : 반복 사실 ... :(

편집을 반환 if (!getline(m_ifs, line))/

감사

가이

+0

왜 여기에있는 사람들로부터 큰 도움을 받았다고 당황 스럽습니까? :) :) –

+0

왜 다른 Q에서 내 대답을 사용하지 않습니까? –

+0

@RSahu - 일반적으로 사소한 일에 도움을 요청할 필요가 있음을 당황스럽게 생각했지만 도움 자체는 당황 스러웠습니다. –

답변

2

스트림 열기 전에 예외 활성화 :

그렇지 않으면 m_ifs.open은 버리지 않습니다.

는 그리고 당신은 std::ifstream::failure을 잡으려고 있습니다

try { 
    m_ifs.open("C:\\Users\\guyth\\Documents\\test.txt", fstream::in); 
    } 
    catch (std::ifstream::failure e) { 
    std::cerr << "Exception opening file: " << std::strerror(errno) << "\n"; 
    } 

은 자세한 내용은 ios::exceptions를 참조하십시오.

+0

그 문제에 대답하지 못합니다. –

+0

글쎄요. 이 코드는 코드를 수정하여'open()'이 실패한 이유를 출력합니다. – rustyx

+0

예외에는 실패 (사용 권한, 파일을 찾을 수 없음 등)에 대한 실제 정보가 포함되지 않습니다.), 안 그래? –

관련 문제