[C++] fstream으로 입력 출력

2021. 8. 19. 11:12·C++/Basic
#include <iostream>
#include <fstream>

using namespace std;

int main()
{
	char co[21] = "";
	ofstream fout;	//파일로 내보내기
	ifstream fin;	//파일을 가져오기

	cin >> co;
	
	fout.open("../test.txt");	//../는 현재 폴더의 전 폴더
	fout << co << " ";	//co에 넣은 값을 넣고 ' '한번 띄어 쓴다.    abcd 
	fout << co[0];	//co에 있는 0~3까지의 값을 넣는다. 안 띄어썼기 때문에 값이 붙여진다. abc
	fout << co[1];
	fout << co[2] << " ";	//한번 띄워서 abc d가 되게한다.
	fout << co[3];
	fout.close();	//한번 파일을 열었으면 꼭 닫아준다.

	char ci;
	fin.open("../test.txt");
	while(fin.get(ci))	//써있는 모든 글자를 가져온다.
	{
		cout << ci;
	}
	fin.close();
}

입력값

abcd

 

출력값

abcd abc d

 

fout.open("../test.txt");
fout << co << " ";
fout << co[0];
fout << co[1] << " ";
fout << co[2];
fout << co[3];
fout.close();

입력값

안녕하세요안녕하세요

출력값

안녕하세요안녕하세요 안 녕

 

- 한글은 입력이 2개씩 차지한다 만약co[0]만쓰면 출력을 제대로 하지못한다.

- 열려고 하는 파일이 없을 경우 새로 그 이름의 파일을 만들어서 입력한다.

 

 

입출력 타입
#include <iostream>
#include <string>
#include <fstream>

using namespace std;

const string file = "../test.txt";

int main()
{
    char ch;

    ifstream fin(file);	//선언과 동시에 파일을 열 수 있다.

    if (fin.is_open())
    {
        cout << file << " 현재 내용은 다음과 같다.\n";
        while (fin.get(ch))
            cout << ch;
        fin.close();
    }

    ofstream fout(file, ios_base::out);	//오른쪽의 값은 읽기쓰기타입
    if (!fout.is_open())
    {
        cerr << "출력을 위해" << file << " 파일을 열 수 없다.\n";
        exit(EXIT_FAILURE);
    }

    cout << "\n내용을 입력하세요.\n";
    string memo;
    while (getline(cin, memo) && memo.size() > 0)
    {
        fout << memo << endl;
    }
    fout.close();

    fin.open(file);
    if (fin.is_open())
    {
        cout << file << " 바뀐 내용은 다음과 같다.\n";
        while (fin.get(ch))
            cout << ch;
        fin.close();
    }

    return 0;
}

- ofstream fout(file, ios_base::out); //오른쪽의 값은 읽기쓰기타입

 

종류

ios_base::in   읽기 위해 연다.

ios_base::out   쓰기 위해 열고, 파일이 이미 존재하면 내용을 비운다.

ios_base::out | ios_base::app   쓰기 위해 열고, 뒤에 덧붙인다.

ios_base::in | ios_base::out    읽기,쓰기 겸용으로 열고, 파일 안의 어디에나 쓸 수 있다.

ios_base::in | ios_base::out | ios_base::trunc    읽기,쓰기 겸용으로 열고 파일이 이미 존재하면 그 파일의 내용을 먼저 비운다.

c++mode | ios_base::binary    c++모드와 2진모드로 연다. ios_base::in | ios_base::binary와 같이 모드와 혼용할 수 있는 것이다.

c++mode | ios_base::ate    c++모드로 열고 파일의 끝으로 파일 포인터를 이동한다.

 

- ios_base::app과 ios_base::ate는 둘 다 열은 파일의 끝으로 파일 포인터를 이동시킨다.

둘의 차이는 app는 파일의 끝에만 데이터를 덧붙일 수 있고, ate는 파일포인터를 파일의 끝에 위치시킨다.

 

 

2진 파일

기본적으로 구조체의 내용을 저장하려면 각 데이터를 따로 저장해야한다.

struct testing
{
    string name;
    double pops;
};
testing te;

ofstream fout(file, ios_base::out);

te.name = "sssss";
te.pops = 3.456789;

fout << te.name << " " << te.pops << "\n";
fout.close();

- 구조체의 변수들이 많아지면 번거롭다.

 

 

    struct testing
    {
        string name;
        double pops;
    };
    testing te;

    ofstream fout(file, ios_base::out | ios_base::binary);
    
    int i = 2;
    while (i--)
    {
        cin >> te.name >> te.pops;
        fout.write((char*)&te, sizeof te);
    }
    fout.close();

    ifstream fin(file, ios_base::in | ios_base::binary);
    if (fin.is_open())
    {
        while (fin.read((char*)&te, sizeof te))
        {
            cout << te.name << " " << te.pops << "\n";
        }

        fin.close();
    }

- 공간을 덜 차지한다.

- 처리 속도가 빠르다.

- write로 쓰고 read로 읽어온다. char* 로 저장하여 sizeof로 크기만큼 저장

저작자표시 (새창열림)

'C++ > Basic' 카테고리의 다른 글

[C++] 가변인자 템플릿  (0) 2021.08.25
[C++] 람다  (0) 2021.08.24
[C++] cin, get, getline  (0) 2021.08.17
[C++] cin의 false/true  (0) 2021.08.13
[C++] 출력 함수  (0) 2021.08.12
'C++/Basic' 카테고리의 다른 글
  • [C++] 가변인자 템플릿
  • [C++] 람다
  • [C++] cin, get, getline
  • [C++] cin의 false/true
chanheess
chanheess
'왜' 그렇게 했는가?에 대한 생각으로 공부 및 작업의 저장관리
  • chanheess
    왜 그렇게 생각했는가?
    chanheess
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Backend Programming
      • Game Programming
        • Unreal
        • DirectX
      • C++
        • Memo
        • Basic
        • Effective Modern
      • Algorithm
        • Memo
        • Baekjoon
        • Programmers
        • HackerRank, LeetCode
      • Data Structure
      • Design Pattern
      • Etc
        • Memo
        • Daily Log
        • Book
  • 최근 글

  • 최근 댓글

  • 태그

    spring
    SpringSecurity
    Java
    c++ 기초 플러스
    티스토리챌린지
    프로그래머스
    JPA
    백준
    위클리 챌린지
    알고리즘
    JWT
    dp
    오블완
    dfs
  • hELLO· Designed By정상우.v4.10.0
chanheess
[C++] fstream으로 입력 출력
상단으로

티스토리툴바