반응형

 

※ C의 파일 입출력은 다음 링크에서 확인

 

C 파일 입출력

파일 입출력 - 프로그램 내의 정보를 외부 파일에 저장하거나 외부 파일의 정보를 프로그램으로 불러오는 방식. ※ 스트림 : 구현한 프로그램과 참조할 데이터가 저장되어 있는 파일 사이에 놓

srdeveloper.tistory.com


 

파일 입출력

- 프로그램 내의 정보를 외부 파일에 저장하거나 외부 파일의 정보를 프로그램으로 불러오는 방식

- 필요 헤더 : <fstream>

- 파일 내용 출력 : << 내용

- 파일 내용 입력 : >> 내용

 

 

 

ofstream

- 쓰기모드 형태로 파일 정보를 담는다.

- 파일이 없을경우 파일을 생성한다.

- ofstream.save(FileName, OpenMode)

  • OpenMode : default값은 덮어쓰기 모드이며, 파일 내용을 덧붙이려면 ios::app를 입력한다.

- ofstream.close()

  • 스트림을 해제하는 함수.
#include <fstream>
using namespace std;

void main()
{
    ofstream f;
    f.open("Temp.txt");
    if(f.is_open())
    {
        f << "Empty" << endl;
        f.close();
    }
}

 

 

 

 

ifstream

- 읽기모드 형태로 파일정보를 담는다.

- 파일이 없을경우 NULL을 반환한다.

- >>

  • 띄어쓰기 또는 개행단위로 문자열을 가져온다.

- getline(ifstream, string)

  • 개행단위로 문자열을 가져온다.
  • 필요 헤더 : <string>
#include <fstream>
#include <string>
using namespace std;

void main()
{
    ifstream f;
    string str;
    f.open("Temp.txt");
    
    //1. >> 연산자
    while(!f.eof())
    {
        f >> str;
    }
    
    //2. getline()
    while(!f.eof())
    {
        getline(f, str);
    }
}
반응형

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

C++ this 포인터  (0) 2021.10.24
C++ 복사 생성자 심화  (0) 2021.10.17
C++ 생성자, 복사생성자, 소멸자 (+ const)  (0) 2021.10.15
C++ 동적할당 new, delete  (0) 2021.10.13
C++ 참조자(Reference)  (0) 2021.09.29
반응형

파일 입출력

- 프로그램 내의 정보를 외부 파일에 저장하거나 외부 파일의 정보를 프로그램으로 불러오는 방식.

  ※ 스트림 : 구현한 프로그램과 참조할 데이터가 저장되어 있는 파일 사이에 놓는 다리.

- 필요 헤더 : <stdio.h>

 

fopen 함수

- FILE* fopen(char* filename, char* mode)

- mode 값에 따라 파일 입출력 옵션이 정해진다

  ※ w(덮어쓰기) : 파일이 없을 경우 새로 만듦, 내용이 있을 경우 전부 지우고 다시 작성됨.

  ※ a(추가) : 파일이 없을 경우 새로 만듦, 내용이 있을 경우 마지막 내용 뒤 추가.

  ※ r(읽기) : 파일이 없을 경우 NULL을 반환한다.

- 성공 시 해당 FILE 구조체 변수의 주소 값, 실패시 NULL 반환

  ※ 구조체의 주소 값을 반환하기 때문에 FILE 포인터로 변수를 선언함.

  ※ 해당 함수를 호출하면 FILE 구조체 생성 후, 구조체 변수에 파일에 대한 정보가 담긴다.

 

fclose 함수

- int fclose(FILE* stream)

- fopen으로 인해 형성된 스트림을 해제하는 함수

  ※ 운영 체제가 할당한 자원(주로 메모리)을 반환한다.

  ※ 스트림 중간에 존재하는, 버퍼링 되어있던 데이터의 출력.

- 성공 시 0, 실패 시 EOF를 반환

  ※ EOF : end of file, -1의 값을 가지고 있는 상수이다.

 

fprintf 함수

- int fprintf(FILE* stream, char* format)

- 파일의 내용 출력

  ※ 출력의 대상이 콘솔이 아닌 파일이다.

 

구구단 예시

#include<stdio.h>

void main()
{
    FILE* file = fopen("GoGoDan.txt", "w");
    for(int i = 1; i <= 9; i++)
        for(int j = 1; j <= 9; j++)
            fprintf(file, "%d x %d = %d\n", i, j, i * j);
    
    fclose(file);
    
    //결과 : 1단 ~ 9단까지 구구단
}

 

fscanf 함수

- int fscanf(FILE* stream, char* format)

  ※ 파일의 끝에 도달하면 EOF를 반환한다.

- 띄어쓰기 또는 엔터 단위로 정보를 가져온다.

- 파일의 내용 입력

  ※ 입력의 대상이 콘솔이 아닌 파일이다.

 

fgets 함수

- char* fgets(char* buffer, int count, FILE* stream)

- 엔터 단위로 정보를 가져온다.

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

typedef struct temp
{
    char arr[10];
    int a;
}Temp;

void main()
{
    Temp tmp = { "A", 10 };
    FILE* file = fopen("Tmp.txt", "w");
    char buf[256];
    fprintf(file, "%s\n", tmp.arr);
    fprintf(file, "%d", tmp.a);
    fclose(file);
    
    file = fopen("Tmp.txt", "r");
    if (file == NULL)
    {
        printf("해당 파일이 존재하지 않습니다.\n");
    }
    else
    {
        while (!feof(file))
        {
            fgets(buf, sizeof(buf), file);
            printf("%s", buf);
        }
        
        fclose(file);
    }
    
    // 결과 : A
    //        10
}

 

fread 함수

- char* fread(char* buffer, size_t size, size_t count, FILE* stream)

  ※ count는 바이트 수이다. 보통 1로 둔다.

- 성공지 전달인자 count, 실패 또는 파일의 끝 도달 시 count보다 작은 값 반환

- fgets 함수와는 달리 비어있는 부분은 NULL로 채워주지 않는다.

  ※ 그렇기 때문에 buffer 배열을 선언시에 초기화 후 사용한다.

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

typedef struct temp
{
    char arr[10];
    int a;
}Temp;

void main()
{
    Temp tmp = { "A", 10 };
    FILE* file = fopen("Tmp.txt", "w");
    char buf[256] = {0};
    fprintf(file, "%s %d\n", tmp.arr, tmp.a);
    fclose(file);
    
    file = fopen("Tmp.txt", "r");
    if (file == NULL)
    {
        printf("해당 파일이 존재하지 않습니다.\n");
    }
    else
    {
        fread(buf, sizeof(buf), 1, file);
        printf("%s", buf);
        
        fclose(file);
    }
    
    // 결과 : A 10
}

  ※ buffer 선언부를 보면 초기화 한것을 확인할 수 있다.

반응형

'Stack > C' 카테고리의 다른 글

C 중간 활용 : 학생 관리 시스템 만들기  (0) 2021.08.24
C 구조체, 구조체 포인터  (0) 2021.08.22
C 동적할당  (0) 2021.08.22
C 포인터, 배열  (0) 2021.08.22

+ Recent posts