C++/Library
2021. 3. 29. 23:59
fstream
<fstream>
라이브러리기본 옵션은 ASCII 포맷으로 덮어쓰기이다.
옵션에 대한 플래그는 다음과 같다.
xiosbase
static constexpr _Openmode in = static_cast<_Openmode>(0x01); static constexpr _Openmode out = static_cast<_Openmode>(0x02); static constexpr _Openmode ate = static_cast<_Openmode>(0x04); static constexpr _Openmode app = static_cast<_Openmode>(0x08); static constexpr _Openmode trunc = static_cast<_Openmode>(0x10); static constexpr _Openmode _Nocreate = static_cast<_Openmode>(0x40); static constexpr _Openmode _Noreplace = static_cast<_Openmode>(0x80); static constexpr _Openmode binary = static_cast<_Openmode>(0x20);
옵션으로 이어쓰기, binary 포맷으로 열기가 가능하다.
클래스의 소멸자에서 파일을 닫아주기 때문에 굳이
fstream.close()
를 할 필요가 없다. (RAII)- 하지만 가독성 등의 이유로 명시하는게 낫다고 생각한다.
비주얼 스튜디오에서
Ctrl + K
를 누르고R
을 누르면(컨트롤 없이) 작업 중인 폴더가 익스플로러로 열린다.
예제
ASCII 포맷으로 저장 후 불러오는 예제
#include <iostream> #include <string> #include <fstream> int main() { using namespace std; string filename = "my_first_file.txt"; { ofstream ofs(filename); if (!ofs) { cerr << "Fail to open file\n"; exit(1); } ofs << "Line 1\n"; ofs << "Line 2\n"; ofs.close(); } { ifstream ifs(filename); if (!ifs) { cerr << "Fail to open file\n"; exit(1); } while (ifs) { string str; getline(ifs, str); cout << str << endl; } ifs.close(); } } /* stdout stderr Line 1 Line 2 */
ios::app
사용#include <iostream> #include <string> #include <fstream> int main() { using namespace std; string filename = "my_first_file.txt"; { ofstream ofs(filename, ios::app); if (!ofs) { cerr << "Fail to open file\n"; exit(1); } ofs << "Line 1\n"; ofs << "Line 2\n"; ofs.close(); } { ifstream ifs(filename); if (!ifs) { cerr << "Fail to open file\n"; exit(1); } while (ifs) { string str; getline(ifs, str); cout << str << endl; } ifs.close(); } } /* stdout stderr (3번 반복 실행 시) Line 1 Line 2 Line 1 Line 2 Line 1 Line 2 */
binary 포맷 예제
#include <iostream> #include <string> #include <fstream> int main() { using namespace std; string filename = "my_first_file.txt"; { ofstream ofs(filename, ios::binary); if (!ofs) { cerr << "Fail to open file\n"; exit(1); } const unsigned num_data = 10; ofs.write((char*)&num_data, sizeof(num_data)); for (int i = 0; i < num_data; ++i) ofs.write((char*)&i, sizeof(i)); ofs.close(); } { ifstream ifs(filename, ios::binary); if (!ifs) { cerr << "Fail to open file\n"; exit(1); } unsigned num_data = 0; ifs.read((char*)&num_data, sizeof(num_data)); cout << "Number of data : " << num_data << endl; for (unsigned i = 0; i < num_data; ++i) { int num; ifs.read((char*)&num, sizeof(num)); cout << num << endl; } ifs.close(); } } /* stdout stderr Number of data : 10 0 1 2 3 4 5 6 7 8 9 */
stringstream 사용
#include <iostream> #include <string> #include <fstream> #include <sstream> int main() { using namespace std; string filename = "my_first_file.txt"; { ofstream ofs(filename, ios::binary); if (!ofs) { cerr << "Fail to open file\n"; exit(1); } stringstream ss; ss << "Line 1\n"; ss << "Line 2\n"; string str = ss.str(); unsigned str_length = str.size(); ofs.write((char*)&str_length, sizeof(str_length)); ofs.write(str.c_str(), str_length); ofs.close(); } { ifstream ifs(filename, ios::binary); if (!ifs) { cerr << "Fail to open file\n"; exit(1); } unsigned str_length = 0; ifs.read((char*)&str_length, sizeof(str_length)); cout << "Size of string: " << str_length << endl; string str; str.resize(str_length); ifs.read(&str[0], str_length); cout << str << endl; ifs.close(); } } /* stdout stderr Size of string: 14 Line 1 Line 2 */
'C++ > Library' 카테고리의 다른 글
C++ mutex (0) | 2021.03.30 |
---|---|
C++ 파일 임의 위치 접근 (0) | 2021.03.29 |
C++ 정규 표현식 (Regular Expressions) (0) | 2021.03.29 |
C++ 흐름 상태 (Stream States) (0) | 2021.03.29 |
C++ cout (0) | 2021.03.29 |