C++ 파일 중간부분 수정
구글링해보니 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;
}