본문 바로가기

프로그래밍 언어 문제/C

[C언어] 연습문제7

[문제]

src.txt라는 파일을 만들고 아래와 같이 입력하고 저장한다.

Hello C World
Welcome to C World

src.txt 파일을 바이너리 데이터로 읽어서 des에 바이너리 데이터로 쓰는 바이너리 파일 복사 프로그램을 작성하라.

조건1) 파일을 여는 데 실패하면 메시지를 띄울 것
조건2) 파일을 복사하는데 성공하거나 실패하면 그에 따른 메시지를 띄울 것
조건3) memset 함수를 사용하지 말 것

 

[실행결과]

 

[수정할 코드]

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUFFER_SIZE	30

int main(void)
{
	char buffer[BUFFER_SIZE];
	int res;
	FILE* fp1 = fopen("src.txt", "rb");
	FILE* fp2 = fopen("dst.txt", "wb");

	if (fp1 == NULL || fp2 == NULL) {
		puts("파일오픈 실패");
		return -1;
	}

	while (1)
	{
		res = fread(buffer, 1, BUFFER_SIZE, fp1);

		if (res != BUFFER_SIZE) {
			if (feof(fp1) != 0) {
				fwrite(buffer, 1, BUFFER_SIZE, fp2);
				puts("file copy complete");
			}
			else {
				puts("file copy fail");
			}
			break;
		}
		fwrite(buffer, 1, BUFFER_SIZE, fp2);
		memset(buffer, 0x0, sizeof(buffer));
	}
	
	fclose(fp1);
	fclose(fp2);

	return 0;
}

[코드]

#include<stdio.h>

int main(void)
{
	int readCnt;
	char buf[20];
	FILE* fp1 = fopen("src.txt", "rb");
	FILE* fp2 = fopen("des.txt", "wb");

	if (fp1 == NULL || fp2 == NULL) {
		puts("파일오픈 실패");
		return -1;
	}

	while (1)
	{
		readCnt = fread((void*)buf, 1, sizeof(buf), fp1);

		if (readCnt < sizeof(buf))
		{
			if (feof(fp1) != 0)
			{
				fwrite(buf, 1, readCnt, fp2);
				printf("파일 복사 완료");
				break;
			}
			else
				printf("파일 복사 실패");

			break;
		}

		fwrite((void*)buf, 1, sizeof(buf), fp2);
	}

	fclose(fp1);
	fclose(fp2);

	return 0;
}

 

<참고>

윤성우의 열혈 C 프로그래밍

'프로그래밍 언어 문제 > C' 카테고리의 다른 글

[C언어] 연습문제5  (0) 2022.04.20
[C언어] 연습문제6  (0) 2022.04.16
[C언어] 연습문제8  (0) 2022.04.13
[C언어] 연습문제9  (0) 2022.04.13
[C언어] 연습문제10  (0) 2022.04.08