1. 파일 입출력의 기본 개념
- 파일 입출력은 주로 파일을 열고 데이터를 읽거나 쓴 후 파일을 닫는 순서로 진행
- 파일을 다루기 위해서는 먼저 해당 파일을 열어야 하며, 이를 위해 fopen 함수를 사용
- 파일 작업이 끝나면 반드시 파일을 닫아야 하며, fclose 함수 사용
fopen
- fopen 함수는 파일을 열 때 사용하는 함수
- 파일의 경로와 모드를 인자로 받고, 모드는 파일 읽기, 쓰기, 추가 등의 방식으로 나타냄
- filename : 열고자 하는 파일의 이름(경로)
- mode : 파일을 열 때의 모드
> r : 읽기 전용으로 파일을 열고, 파일이 존재하지 않으면 NULL 반환
> w : 쓰기 전용으로 파일을 열고, 파일이 존재하지 않으면 새 파일 생성, 존재하면 파일의 내용을 모두 삭제 한 후 다시 작성
> a : 추가 모드로 파일을 열고, 파일이 존재하지 않으면 새 파일을 생성, 존재하면 파일 끝에 데이터 추가
> r+ : 읽기 및 쓰기가 가능한 모드로 파일을 열고, 파일이 존재하지 않으면 NULL을 반환
> w+ : 읽기 및 쓰기가 가능한 모드로 파일을 열고, 파일이 존재하지 않으면 새 파일을 생성, 존재하면 내용을 모두 삭제
> a+ : 읽기 및 쓰기가 가능한 모드로 파일을 열고, 파일이 존재하지 않으면 새 파일을 생성, 존재하면 파일 끝에 데이터를 추가
fclose
- 파일을 다 사용한 후에는 반드시 fclose 함수로 파일을 닫아야 함
- 파일을 닫지 않으면 데이터가 손실되거나 파일이 손상
- fclose는 파일 포인터를인자로 받아 파일을 닫으며, 성공적으로 닫히면 0, 실패하면 EOF 반환
2. 파일 읽기와 쓰기
- 파일을 열었다면 이제 데이터를 읽거나 쓸 수 있다.
- C언어에서fscanf와 fprintf 함수를 사용하여 텍스트 파일 처리
fscanf 함수
- fscanf 함수는 파일에서 데이터를 읽어올 때 사용, scanf 함수와 비슷한 방식으로 작동
- stream : 파일 포인터
- format : 읽어올 데이터의 형식을 지정하는 포맷 문자열
fscanf 예시
fprintf 함수
- fprintf 함수는 파일에 데이터를 출력할 때 사용, printf와 비슷한 방식
- stream : 파일 포인터
- format : 읽어올 데이터의 형식을 지정하는 포맷 문자열
fprintf 출력 예시
3. 텍스트 파일과 이진 파일의 차이
- 파일 입출력에서는 텍스트 파일과 이진 파일로 구분
텍스트 파일
- 텍스트 파일은 사람이 읽을 수 있는 ASCII 또는 유니코드 문자들로 구성된 파일
- fscanf, fprintf와 같은 함수들은 주로 텍스트 파일을 다루는 데 사용
- 파일을 열 때 r 또는 w 모드 사용
이진 파일
- 이진 파일은 숫자, 구조체 등의 데이터를 그대로 바이너리 형식으로 저장
- 사람이 직접 읽기는 어렵지만, 프로그램에서는 데이터를 더 효율적으로 저장하고 읽음.
- 이진 파일을 처리할 때는 fread, fwrite 함수를 사용, 파일을 열 때 rb, wb 모드 사용
4. 파일 입출력의 주요 포인트 요약
- 파일 열기(fopen) : 함수로 파일을 열고, 모드에 따라 읽기 또는 쓰기 작업을 수행
- 파일 닫기(fclose) : 함수로 파일을 닫아 작업을 마무리
- 파일 읽기/쓰기 : fscanf, fprintf는 텍스트 파일을 다루고, fread, fwrite는 이진 파일을 다룸
- 텍스트 파일 vs 이진 파일 : 텍스트 파일은 사람이 읽을 수 있지만, 이진 파일은 바이너리 데이터를 더 효율적으로 처리
'프로그래밍 > C' 카테고리의 다른 글
[C언어-응용문제] 간단한 계산기 프로그램 만들기 (5) | 2024.11.06 |
---|---|
[C언어] 13. 메모리 관리 동적 메모리 할당 (malloc, calloc, free) (2) | 2024.11.01 |
[C언어] 11. 구조체(Structure) (구조체와 배열, 구조체와 포인터) (1) | 2024.10.24 |
[C언어] 10. 포인터 (포인터의 개념, 포인터와 배열, 포인터와 함수(Call by Reference)) (3) | 2024.10.23 |
[C언어] 9. 함수 (6) | 2024.10.16 |