본문 바로가기
윤성우 열혈강의 C 정리

[ C 열혈강의 ] 24장 연습문제 : 파일 입출력

by 어린왕자1234 2022. 7. 9.
// [ 문제24-1  : 문자열 방식의 데이터 입출력 ]  
// 문제1,2,3 : 
// 이름 주민번호 전화번호를 파일로 저장
// 형식:#이름 :윤성우   
// 정상 입력 결과 출력 확인

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>

typedef struct
{
	char name[40];
	char pid[40];
	char phone[40];
	char ffood[40];
	char hobby[40];
} Person;

void inputData(Person* ptr)
{
	printf("이름 입력 :");
	fgets(ptr->name, 40,stdin);
	printf("주민번호 입력 :");
	fgets(ptr->pid, 40, stdin);
	printf("전화번호 입력 :");
	fgets(ptr->phone, 40, stdin);
	printf("좋아하는 음식 입력 :");
	fgets(ptr->ffood, 40, stdin);
	printf("취미 :");
	fgets(ptr->hobby, 40, stdin);
}

int fileWrite(char* fname, Person* p)
{
	FILE* fp;
	fopen_s(&fp, fname, "wt");
	if (fp == NULL)
	{
		printf("파일 오픈 실패!");
		return -1;
	}
	fputs("#이름 :", fp);
	fputs(p->name, fp);
	fputs("#주민번호 :", fp);
	fputs(p->pid, fp);
	fputs("#전화번호 :", fp);
	fputs(p->phone, fp);
	fputs("#좋아하는 음식 :", fp);
	fputs(p->ffood, fp);
	fputs("#취미 :", fp);
	fputs(p->hobby, fp);
	fclose(fp);
	return 0;
}
int fileRead(char* fname, Person* p)
{
	char str[40];
	FILE* fp;
	fopen_s(&fp, fname, "rt");

	if (fp == NULL)
	{
		printf("파일 오픈 실패!");
		return -1;
	}
	while (fgets(str, 40, fp) != NULL)
	{
		printf("%s", str);
	}
	if (feof(fp) != 0)
		return 0;
	else
		return -1;
	fclose(fp);
}

int main(void)
{
	Person p;
	char* filename = "mystory.txt";
	inputData(&p);
	fileWrite(filename, &p);
	fileRead(filename, &p);
	return 0;
}

 


 

// [ 문제24-2  : 파일의 크기를 바이트 단위로 계산하기 ]  
// ftell를 이용한 파일크기 확인 (File* 전달)
// 원 위치로 이동 필요

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>

int fileSize(FILE* fp)
{
	long fpos,fsize;
	fpos = ftell(fp);
	fseek(fp, 0, SEEK_END);
	fsize=ftell(fp);
	fseek(fp, fpos, SEEK_SET);
	return fsize;
}

int main(void)
{
	char str[200];
	char* filename = "mystory.txt";
	FILE* fp;
	fopen_s(&fp, filename, "rt");
	
	while (fgets(str, 100, fp) != NULL)
	{
		fputs(str,stdout);
		printf("파일 size :%ld\n\n", fileSize(fp));
	}
	return 0;
}