[C++] 파일 입출력

2023. 2. 16. 21:33·C++/C++

◆FILE

▷소스코드에서 파일을 사용할 때 사용하는 자료형이다.

▷용도를 정해서 사용한다.

▷w r a +w +r +a

-w는 쓰기, r은 읽기, a는 뒤에서 부터 쓰기이다.

//쓰기 방식으로 파일을 연다. (없을시 생성)
FILE* infile = fopen("text.txt", "w");

◆fclose

▷파일은 열고 닫아야한다.

FILE* infile = fopen("text.txt", "r");
fclose(infile);

◆fprintf(FILE, const char* )

▷파일을 작성할 수 있는 함수이다.

fprintf(infile, "Hello world");

//있는 변수를 입력할때
fprintf(infile, "%d", value);

◆fscanf(FILE, const char*, 저장할공간)

▷파일을 읽어들여서 저장할공간(변수)에 저장한다.

▷이 떄 "%99[^\n]s"를 사용하면 99번째 까지 줄넘김을 뺴고 복사할 수 있다.

fscanf(infile, "%99[^\n]s", input);

◆fprintf의 데이터 낭비의 문제

▷int 값은 4바이트지만, 메모장에는 숫자 자리당 1바이트로 저장되어 데이터가 낭비된다.

▷따라서 fwrite를 통해 이를 해결한다.

 

◆fwrite(const void*, size_t, size_t, FILE)

▷fwrite(저장시킬 최초 주소, 사이즈, 배열크기, 파일포인터)

▷파일에 배열과 같은 자료형을 작성할 수 있다.

int value[5] = {1,2,3,4,5};

fwrite(value, sizeof(int), 5, infile);

◆fread(void* , size_t, size_t, FILE)

▷fread(저장할 최초 주소, 사이즈, 배열크기, 파일포인터)

fread(&value, sizeof(int), 5, infile);

 

◆fopen을 사용할땐 아래에 fclose를 써서 에러를 예방할 것

◆fclose는 nullptr을 파라미터로 받았을 경우 런타임 오류가 발생합니다. 

▷fopen "r"의 경우 파일이 없으면 nullptr을 FILE 자료형이 가지기 때문에 숙지해 둡시다.

//오류를 막기위한 코드
if(infile!=nullptr) fclose(infile);

 

◆텍스트 인코딩 문제

▷C++에서 텍스트는 MS기본 인코딩이나 ANSI인코딩을 통해서 저장하고 활용합니다.

▷보통 메모장은 UTF-8을 표준으로 사용하기 때문에 한글이 깨질 수 있는점을 인지해야 합니다.

 

◆"%127[^\n]s"

▷127개의 문자를 개행문자가 나올때 까지 읽어들입니다.

 

◆fgetc(file)

▷문자 포인터의 위치를 하나 읽어서 넘겨주는 함수입니다.

▷보통 개행문자를 넘기는데 주로 쓰입니다.

 

◆int feof(file)

▷foef()함수는 파일의 끝에 도달하였을 경우 1을 반환합니다.

//끝을 확인하는 코드
if (feof(infile)==1) break;

 

◆한줄씩 파일을 읽고 출력하는 코드

#define _CRT_SECURE_NO_WARNINGS

#include <cstdio>

int main() {
	FILE* file = fopen("in.txt", "r");
	while (true) {
		char line[256];
		fscanf(file, "%255[^\n]s", line);	
		fgetc(file); 
		printf("%s\n ", line);
		if (feof(file)==1) break;
	}
	fclose(file);
	return 0;
}

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

4장 포인터, 배열, 포인터 연산 메모  (0) 2023.06.26
[C++] 람다 함수  (0) 2023.02.17
[C++] STL 자료구조  (0) 2023.02.16
[C++] STL 핵심, Generic  (0) 2023.02.16
[C++] const, static, extern  (0) 2023.02.15
'C++/C++' 카테고리의 다른 글
  • 4장 포인터, 배열, 포인터 연산 메모
  • [C++] 람다 함수
  • [C++] STL 자료구조
  • [C++] STL 핵심, Generic
메카인
메카인
  • 메카인
    메카인의 지식창고
    메카인
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 코딩 공부
        • TIL(Today I Learn)
        • TIL
        • 백준(C++)
        • Python
        • 알고리즘
        • 프로젝트 회고
      • C++
        • C++
        • C++ STL
        • C,C++ mCoding yotube
      • 게임개발
        • 언데드서바이벌_골드메탈_클론코딩
        • 3D_골드메탈_클론코딩
        • 유니티_문제해결
        • 게임 수학
      • Unreal 공부
        • UE5 GameDev
        • Unreal Engine 4 C++ The Ult..
      • 교재 문제 풀이
        • 운영체제
      • 정보처리기사
        • 정처기 요약
        • 정처기 오답노트
      • 학교수업
        • 데이터베이스
        • 프로그래밍 언어론
        • 리눅스 시스템
        • 네트워크
      • 일상
        • 주식
        • 독서
        • 일기
      • (비공개 전용)
        • memory
        • Build
        • OOP
        • Smart Pointer
        • lamda
        • 게임 수학
        • 모던 C++
        • 모던 C++ STL
        • 모던 C++ Concurrency, Paralle..
        • 책
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 글쓰기
    • 블로그 관리
  • 링크

  • 공지사항

    • 공지사항 - 인생과 블로그의 목표
  • 인기 글

  • 태그

    ~
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
메카인
[C++] 파일 입출력
상단으로

티스토리툴바