본문으로 바로가기
  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 보온병 겸용 여행용 전기포트 사용후기 thumbnail C언어 시리얼 통신 브레이크(break) 신호 전송 방법 (2) thumbnail 윈도우11 키보드 반응속도 빠르게 thumbnail 엣지 주소창 검색엔진 키워드 선택 방법 (2) thumbnail 레노버 슬림7 프로 윈도우 11 우회 설치 (2) thumbnail 랜섬웨어 복구 프로그램과 예방 방법 (2) thumbnail 컴퓨터 카카오톡 메시지 백업 복구 방법 (3) thumbnail 화분 과습 원인과 분갈이 화분 고르는 방법
말씀 고맙습니다. 즐거운 하⋯ 💬바다야크 C언어 정말로 오랜만이네요⋯ 💬짱구노리 사용해 보시면 정말 편합니다⋯ 💬바다야크 오 저도 등록해서 사용해봐야⋯ 💬TommyT 짱구노리님 말씀처럼 메인으⋯ 💬바다야크