본문 바로가기
Programming/C

15. 스트림과 파일 입출력

by 기딩 2023. 10. 19.
728x90

파일 열기

FILE *fp;

fp = fopen(”파일이름.txt”, “파일모드w”);.

 

파일모드

  • r 읽기모드
  • w 쓰기모드
  • a 추가모드로 파일 열기
  • r+ 읽기모드, 쓰기 전환가능
  • w+ 쓰기모드 생성, 읽기 전환 가능
  • a+ 추가모드, 읽기 전환 가능
  • t 텍스트 파일 모드
  • b 이진 파일 모드
  •  

파일 만들고 파일에 텍스트 쓰기

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
	FILE* fp = NULL; //포인터로!!

	fp = fopen("sample.txt", "w");

	if (fp == NULL)
		printf("파일 열기 실패\\n");
	else
		printf("파일 열기 성공\\n");
	fprintf(fp, "Hello file\\n");
	fclose(fp); //닫아야 함. 안 닫으면 저장 안 되는 경우도 ㅇ

	return 0;
} //프로젝트 폴더에 텍스트 파일 만들어짐

 

텍스트 파일에서 특정 문자열을 탐색하는 프로그램

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

int main(void)
{
	FILE* fp;
	char fname[128];
	char buffer[256];
	char word[256];
	int line_num = 0;

	printf("입력 파일 이름을 입력하시오:  ");
	scanf("%s", fname);

	printf("탐색할 단어를 입력하시오:  ");
	scanf("%s", word);
	// 파일을 읽기 모드로 연다.
	if ((fp = fopen(fname, "r")) == NULL)
	{
		fprintf(stderr, "파일 %s을 열 수 없습니다.\\n", fname);
		exit(1);
	}

	while (fgets(buffer, 256, fp)) {
		line_num++;
		if (strstr(buffer, word)) {
			printf("%s: %d 단어 %s이 발견되었습니다.\\n", fname, line_num, word);
		}
	}
	fclose(fp);

	return 0;
}

 

 

임의 접근 파일

  • 순차 접근 : 파일의 처음부터 순차적으로 읽거나 기록
  • 임의 접근 : 파일의 어디든 읽기와 쓰기 가능

 

  • 파일 포인터 : 현재 어떤 위치에서 이루어지는지
    - 강제적으로 파일 포인터 이동시키면 임의 접근 가능

  • fseek()
    int fseek(FILE* fp, long offsetm int origin);
    SEEK_SET = 0 = 파일의 시작
    SEEK_CUR = 1 = 현재 위치
    SEEK_END = 2 = 파일의 끝

 

  • ftell() long ftell(FILE* fp);

 

예제

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
	FILE* fp;
	char buffer[100];

	fp = fopen("sample.txt", "wt");
	fputs("ABCDEFGHHIJKLMNOPQRSTUVWXYZ", fp);
	fclose(fp);

	fp = fpoen("sample.txt", "rt");

	fseek(fp, 3, SEEK_SET);
	printf("fseek(fp, 3, SEEK_SET) = %c \\n", fgetc(fp));

	fseek(fp, -1, SEEK_END);
	printf("fseek(fp, -1, SEEK_END) = %c \\n", fgetc(fp));

	fclose(fp);

	return 0;
}
728x90

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

[C언어] 17. 동적메모리와 연결리스트  (0) 2023.10.19
16. 전처리 및 다중 소스 파일  (1) 2023.10.19
13. 구조체  (0) 2023.10.19
12. 문자열  (0) 2023.10.19
11. 포인터  (1) 2023.10.19