복사할 파일명과 복사 후 생성되는 파일명을 입력받아서 파일을 복사하는 프로그램을 작성하라.
단, txt파일 뿐만 아니라 이미지 파일 등..
모든 종류의 파일에 다 동일하게 적용할 수 있어야 한다.
복사 진행 과정을 백분율로 화면에 표시해주도록하고 n바이트씩 복사하도록 한다.
ex)
4바이트
- 원본 파일 : source.txt
- 대상 파일 : dest.txt
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
void copy_file(const char* src_file, const char* dest_file, size_t buffer_size) {
FILE* src, * dest;
char* buffer;
size_t bytes_read, total_bytes = 0, file_size;
// 원본 파일 열기
src = fopen(src_file, "rb");
if (src == NULL) {
perror("파일이 없습니다.");
exit(EXIT_FAILURE);
}
// 복사할 파일 열기
dest = fopen(dest_file, "wb");
if (dest == NULL) {
perror("파일이 없습니다.");
fclose(src);
exit(EXIT_FAILURE);
}
// 원본 파일 크기 얻기
fseek(src, 0, SEEK_END);
file_size = ftell(src);
fseek(src, 0, SEEK_SET);
// 버퍼 할당
buffer = (char*)malloc(buffer_size);
if (buffer == NULL) {
perror("버퍼 할당 실패");
fclose(src);
fclose(dest);
exit(EXIT_FAILURE);
}
// 파일 복사
while ((bytes_read = fread(buffer, 1, buffer_size, src)) > 0) {
fwrite(buffer, 1, bytes_read, dest);
total_bytes += bytes_read;
// 진행 상황 표시
printf("\n 진행 과정 : %.2f%%", (double)total_bytes / file_size * 100);
fflush(stdout);
system("cls");
}
printf("\n복사가 완료되었습니다.\n");
// 파일 및 버퍼 닫기
free(buffer);
fclose(src);
fclose(dest);
}
int main() {
char src_file[256] = "../data/a.txt";
char dest_file[256] = "../data/b.txt";
size_t buffer_size;
// 사용자로부터 파일명과 버퍼 크기 입력받기
printf("원본 파일 경로와 타입을 입력해주세요 : ");
scanf("%255s", src_file);
printf("복사할 파일 경로와 타입을 입력해주세요 : ");
scanf("%255s", dest_file);
printf("한번에 복사할 바이트 입력해주세요 : ");
scanf("%zu", &buffer_size);
// 파일 복사 함수 호출
copy_file(src_file, dest_file, buffer_size);
return 0;
}
'프로그래밍 언어 > C & C++ 정리' 카테고리의 다른 글
C++ 기억 존속 시간, 사용 범위 (0) | 2024.08.01 |
---|---|
템플릿 (0) | 2024.07.31 |
파일 읽고 쓰기 - C언어 (0) | 2024.07.05 |
함수와 스택 그리고 호출 스택 (1) | 2024.06.25 |
동적 바인딩 정적 바인딩 (0) | 2024.06.05 |