2011-09-28 2 views
2

fstream 라이브러리를 사용하여 "ooooo"내용이 "ooXXo"인 텍스트 파일을 업데이트 할 방법이 있는지 질문하고 싶습니다. cstdio를 사용하는 방법이 있다는 것을 알고 있지만 지원되지 않는 예외 처리 때문에이 파일을 사용하고 싶지 않습니다 ... 또한 파일을 메모리로 읽어 들이고 싶지 않은 부분을 업데이트 한 다음 깨끗한 파일은 ... 기본적으로 나는 fstream 함께 할 수있는 방법을 찾고 있어요 : 기본적으로<fstream> 라이브러리로 파일 업데이트

/* fseek example */ 
#include <stdio.h> 

int main() 
{ 
    FILE * pFile; 
    pFile = fopen ("example.txt" , "w"); 
    fputs ("This is an apple." , pFile); 
    fseek (pFile , 9 , SEEK_SET); 
    fputs (" sam" , pFile); 
    fclose (pFile); 
    return 0; 
} 

답변

2
#include <fstream> 

int main(){ 
    std::fstream pFile("example.txt"); 
    pFile << "This is an apple."; 
    pFile.seekp(9); 
    pFile << "sam"; 
    pFile.close(); 
    return 0; 
} 

fstream은 읽기와 쓰기 모두를위한 파일을 엽니 다. 그 동작을 제어하는 ​​생성자의 기본값을 가진 두 번째 인수가 있습니다.

+0

일반적으로 읽기 또는 쓰기 액세스 만 필요한 경우에는 'ifstream' /'ofstream'을 사용하여 더 명확하게 지정할 수 있습니다. –

+0

네, 그렇지만 이미 존재하는 파일을 업데이트 할 수는 없겠지요. 01d55라고 생각합니다. 파일을 ofstream 또는 fstream으로 ios :: out 플래그로 열면, file, ios :: out없이 fstream이 필요한 파일을 갱신한다. 답장을 보내 주셔서 감사합니다;) – Bat0u89

+0

실제로 두 플래그가 필요합니다 : ios :: in | ios :: out 또한 바이너리 플래그가 설정되어있는 경우 ... – Bat0u89

3
#include <fstream> 

int main() 
{ 
    std::ofstream os("example.txt"); 
    os<<"This is an apple."; 
    os.seekp(9); 
    os<<" sam"; 
    return 0; 
} 
+1

스트림에서 'close'를 호출해야합니다. 그것은'os'의 소멸자에서 자동으로 호출 될 것입니다. 그러나 그때까지 예외가 있으면 그것을 삼킬 것입니다. –

+0

@ K-ballo : 물론이 코드에는 오류 체크가 전혀 없지만 원래 예제를 따르고 있습니다. 그리고 어쨌든, 나는 당신의 요지를 알지 못한다. 명시 적으로 예외를 설정하지 않으면 스트림 객체 자체가 던지지 않는다. 내부 버퍼로부터'std :: bad_alloc'라고 가정 해 봅시다.이 샘플 코드에서는'try' 블록이 없으므로'close()'라고해도 예외가 처리되지 않고 'terminate()'가 호출됩니다 (이것은 어쨌든 여기서 일어날 것입니다) ... 아니면 다른 것을 놓치고 있습니까? –

+0

아니, 그냥 fclose와 같은 것이 있다는 것을 언급 할 가치가 있다고 생각하고, 소멸자가 당신을 위해하는 것보다 항상 같은 것을 의미하는 것은 아닙니다. –

관련 문제