-
C언어 파일 복사Visual Studio/C 기초 2013. 6. 14. 00:02
C언어 프로그램에선 파일을 직접 복사하는 기능이 없어서 여러 함수를 사용하여 복사해야 합니다. 자세한 내용은 예제를 보면서 설명해 드리겠습니다.
#include <stdio.h>
#define MAX 80
int copy(char *exist, char *anew);
main()
{
char src[MAX], target[MAX]; //src는 원본, target은 복사 될 새로운 파일 이름.
printf("원본 파일 이름을 입력하세요 : ");
gets(src);
printf("복사 될 파일 이름을 입력하세요 : ");
gets(target);if(copy(src,target)==0) //맨 아래 주석 참조
printf("복사가 성공적으로 완료되었습니다.\n");
else
fprintf(stderr,"파일을 복사하는 데 실패했습니다.\n");
}
int copy(char *exist, char *anew)
{
FILE *fexist, *fanew;
int a;
if((fexist = fopen(exist,"rb"))==NULL)
return -1;
if((fanew = fopen(anew,"wb"))==NULL)
{
fclose(fexist);
return -1;
}while(1)
{
a = fgetc(fexist); //원본 파일에서 한 바이트를 읽어냄.
if(!feof(fexist)) //만약 파일의 끝에 도달하지 않았다면 (파일의 마지막은 eof 즉, -1입니다.)
fputc(a, fanew); //출력함.
else //그렇지 않을 경우
break; //빠져나옴.
}fclose(fexist);
fclose(fanew);return(0); //파일 복사가 성공적으로 이루어지면 0값을 돌려줌
}파일의 알고리즘은 이렇습니다.
1. 먼저, 함수를 하나 작성합니다. exist는 src로 부터 전달 받고, anew는 target로 부터 전달 받을 인수입니다.
2. 원본 파일의 이름(또는 경로)을 받을 char형 포인터(src)와, 새로 복사될 파일의 이름을 받을 char형 포인터(target)를 선언합니다.
3. 함수 copy의 알고리즘
ㄱ. 파일형 포인터 fexist, fanew를 선언합니다.
ㄴ. 원본 파일을 읽기 상태의 바이너리 모드로 엽니다. 모든 파일을 복사할 수 있게 하기 위해 바이너리 모드로 열어 두는게 좋습니다. 만약 원본 파일을 불러오는 데 오류가 발생하면 -1값을 돌려주도록 작성합니다. 마찬가지로 새로 복사될 파일을 불러오는데 오류가 발생하면 -1값을 돌려주도록 작성합니다.
ㄷ. while 함수를 이용해 한 번에 한 바이트를 읽게 하고 무한 반복 되게 합니다. while문의 마지막에 파일의 마지막에 도달하지 않았다면 새로 복사될 파일에 바이트를 기록합니다. 원본 파일의 끝까지 도달하게 되면 break를 사용해 while문을 빠져 나갑니다.
'Visual Studio > C 기초' 카테고리의 다른 글
C언어 문자열 길이 계산 [strlen()] (2) 2013.06.15 C언어 임시파일 사용 [tmpnam()] (0) 2013.06.15 C언어 파일 이름 변경하기 [rename()] (0) 2013.05.15 remove() (0) 2013.05.15 feof() (0) 2013.02.14