CS 지식

C++ 파일 중간부분 수정

도리컴 2020. 6. 10. 16:02
반응형

구글링해보니 C언어로 된 설명이 좀 더 많고, C++도 open, read/write에 대해 알려주긴한다. 그런데 C++로 파일 중간부분을 직접수정하는 것에 대한 정확한 설명을 못찾아서 한번 실험해보고, 결과를 끄적여봄


먼저 찾아본걸로 알아낸 개념을 간략히 적으면 세 가지다.

ifstream에서 ios::in형태로 열어서 seekg()로 포인터를 이동, read로 읽음.

ofstream에서 ios::out형태로 열어서 seekp()로 포인터를 이동, write를통해 수정.

fstream은 파일입출력용.

이 정도이다.


근데, ios::out으로 파일을 열면 파일 내용이 모두 지워진 채로 열린다.

ios::app로 열면 파일 내용은 그대로지만, seekp() 함수를 이용할 수 없다.


그러면 파일 중간부분 수정을 어떻게??



결론 : fstream을 사용하고, ios::in | ios::out 옵션으로 열어서 수정한다.

이 때, seekg()와 seekp()를 모두 사용할 수 있는데, 이 둘은 같은 곳을 가리킨다.

그리고, 이동한 포인터에서부터 파일은 덮어씌워진다.



 


#include<iostream>

#include<fstream>


using namespace std;


int main() {


ifstream ifile;

ofstream ofile;

fstream file;

file.open("test.txt", ios::in | ios::out | ios::binary);    


char tmp[50] = "hihi"; 

file.seekp(5, ios::beg);

file.write((char*)&tmp, 4);        //write 실행 후의 파일 내용 : 12345hihi0


file.seekg(0, ios::beg);

file.read(tmp, 50);


cout << tmp << endl;        //출력 내용 : 12345hihi0


file.close();

return 0;

}

반응형