2016-08-31 6 views
0

파일 중간에 문자열을 삽입하려고합니다.fstream에는 삽입 할 수 있지만 iostream에는 삽입 할 수 없습니다.

다음 코드 (출력 문자열이 입력 한 동일하다이 경우)뿐만 아니라 iostream로하는 fstream 작동 :

// File contents: "abcdefghijklmnopqrstxyz"; "uvw" missing 

    // 1 - OK 
    //fstream iofs(fPath, ios_base::in | ios_base::out); 

    // 2 - Same output 
    filebuf fileBuffer; 
    iostream iofs(&fileBuffer); // generic output stream 
    fileBuffer.open(fPath.c_str(), ios_base::in | ios_base::out | ofstream::app); 
    iofs.rdbuf(&fileBuffer); 

    iofs.seekg(0, ios_base::end); 
    iofs.seekp(0, ios_base::end); 

    for(int i = 1; i < 20; ++i) 
    { 
     iofs.seekg(-i, std::ios_base::end); 

     char c = char(iofs.peek()); 

     if(c == 't') { 
      iofs.seekp(-i + 1, std::ios_base::end); 
      iofs << "uvw";  // add missing token 
      iofs << "xyz";  // append pre-existing token 
      break; 
     } 
    } 

출력 :
사례 1 : 시작 = abcdefghijklmnopqrstxyz; 결과 = abcdefghijklmnopqrstuvwxyz
사례 2 : 시작 = abcdefghijklmnopqrstxyz; 결과 = abcdefghijklmnopqrstxyz

내가 잘못하고 있나? 아니면 iostream에 삽입을 할 수 없습니까?

+0

마지막 또는 파일의 스트림 내용을 확인하고 있습니까? 그냥 추측하지만 어쩌면 fstream 아마도 파괴 또는 일부 파일 동기화 및 iostream하지 암시 적으로 플러시 않습니다. 끝에 플러시를 시도 할 수 있습니다. – Hayt

답변

3

일반적인 iostream은 검색 할 수 없습니다. 키보드 또는 프린터로 생각하십시오.

seekp 작업 결과를 확인하지 마십시오. 아마 실패하고 스트림을 오류 상태로 설정합니다. 이후의 출력 시도는 아무 것도하지 않습니다.