본문으로 바로가기
  1. Home
  2. 컴퓨터/프로그래밍
  3. C언어 파일 복사 함수 filecopy()

C언어 파일 복사 함수 filecopy()

· 댓글 0 · 바다야크

C언어 파일 복사 함수 filecopy()

C언어에서 사용할 수 있는 파일 복사 함수 filecopy()입니다. 원본 파일 이름과 사본 파일 이름을 인수로 넘겨주면 되며, 실행 결과를 아래의 상수 값으로 반환합니다.

  • 0 : 파일 복사 완료
  • -1 : 사본 파일 이름이 원본과 같습니다.
  • -2 : 원본 파일 읽기 에러
  • -3 : 사본 파일 생성 에러
  • -4 : 사본 파일 쓰기 에러

함수 호출 후에 반환 값이 0이면 정상적으로 파일이 복사된 것입니다. -1인 경우 생성하려는 파일 이름이 원본과 같을 때입니다. -2는 원 파일 읽기를 못할 때, -3과 -4는 대상 파일 처리 중 에러가 발생한 것입니다.

filecopy() 함수 사용 예제

#include <stdio.h>
#include <unistd.h>
#include <dirent.h>
#include <string.h>
#include <sys/stat.h>

int filecopy( const char  *psour, const char  *pdest) {

    FILE	*fsour, *fdest;
    char       
    buff[1024];
	size_t     n_size;

    if (! strcmp(psour, pdest))   return       -1; // 원본과 사본 파일이 동일하면 에러
    
    if ( NULL == (fsour = fopen(psour, "rb")) )    return -2; // 원본 파일 열기
    if ( NULL == (fdest = fopen(pdest, "wb")) ){
        fclose(fsour);
        return -3;
    } // 대상 파일 만들기
    
    while ( 0 < (n_size = fread( buff, 1, sizeof(buff), fsour)) ){
        if ( 0 == fwrite(buff, 1, n_size, fdest)) {
            fclose(fsour);
            fclose(fdest);
            unlink(pdest); // 에러난 파일 지우고 종료
            return -4;
        }
    }
    fclose(fsour);
    fclose(fdest);
    
    return 0;
}

int   main( int argc, char **argv )
{
    if ( 3 > argc){
		printf("file names are missed\n");
		printf("usage: ]$ %s abc.bmp dest.bmp\n", argv[0]);
		return 1;
	}

    switch( filecopy( argv[1], argv[2])){
    case   -1 : printf( "대상 파일 이름이 원본과 같습니다.\n"); break;
    case   -2 : printf( "원본 파일 읽기 에러.\n"); break;
    case   -3 : printf( "사본 파일 생성 에러.\n"); break;
    case   -4 : printf( "사본 파일 쓰기 에러.\n"); break;
    default   : printf( "복사 완료.\n"); break;
    }
    return 0;
}

예제 실행 결과

예제에서는 test.c 파일을 test.bck로 복사하고, 생성된 test.bck 파일의 내용을 확인합니다.

jwjw@test$ gcc test.c
jwjw@test$ ./a.out test.c test.c
대상 파일 이름이 원본과 같습니다.
jwjw@test$ ./a.out test.c test.bck
복사 완료.
jwjw@test$ cat test.bck
#include <stdio.h>
#include <unistd.h>
#include <dirent.h>
#include <string.h>
#include <sys/stat.h>

int filecopy( const char  *psour, const char  *pdest) {

    FILE        *fsour, *fdest;
    char
    buff[1024];
        size_t     n_size;

    if (! strcmp(psour, pdest))   return       -1; // 원본과 사본 파일이 동일하면 에러

    if ( NULL == (fsour = fopen(psour, "rb")) )    return -2; // 원본 파일 열기
    if ( NULL == (fdest = fopen(pdest, "wb")) ){
        fclose(fsour);
        return -3;
    } // 대상 파일 만들기

    while ( 0 < (n_size = fread( buff, 1, sizeof(buff), fsour)) ){
        if ( 0 == fwrite(buff, 1, n_size, fdest)) {
            fclose(fsour);
            fclose(fdest);
            unlink(pdest); // 에러난 파일 지우고 종료
            return -4;
        }
    }
    fclose(fsour);
    fclose(fdest);

    return 0;
}

int   main( int argc, char **argv )
{
    if ( 3 > argc){
                printf("file names are missed\n");
                printf("usage: ]$ %s abc.bmp dest.bmp\n", argv[0]);
                return 1;
        }

    switch( filecopy( argv[1], argv[2])){
    case   -1 : printf( "대상 파일 이름이 원본과 같습니다.\n"); break;
    case   -2 : printf( "원본 파일 읽기 에러.\n"); break;
    case   -3 : printf( "사본 파일 생성 에러.\n"); break;
    case   -4 : printf( "사본 파일 쓰기 에러.\n"); break;
    default   : printf( "복사 완료.\n"); break;
    }
    return 0;
}jwjw@test$
💬 댓글 0

이름을 저장합니다.

최근글 thumbnail 윈도우10 네트워크 공유 폴더 접속이 안 될 때 thumbnail 접이식 샤오미 전기 모기채 추천 (2) thumbnail 충전식 온수 찜질기 전기 핫팩 사용후기 (1) thumbnail 카카오톡 받은 선물 다시 선물하기 thumbnail 윈도우11 기본앱 삭제 프로그램 레보 언인스톨러 (3) thumbnail 보온병 겸용 여행용 전기포트 사용후기 thumbnail C언어 시리얼 통신 브레이크(break) 신호 전송 방법 (2) thumbnail 윈도우11 키보드 반응속도 빠르게
대단하지요? ^^ 💬바다야크 샤오미는 뭐 다만드네요ㅋ 💬인생은꿀맛 기억해 주셔서 고맙습니다.⋯ 💬바다야크 감사합니다. 너무나도 감사합⋯ 💬U@PIA [승인대기] 💬짱구노리