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$
'컴퓨터 > 프로그래밍' 카테고리의 다른 글
라자루스 사용자 AppData 폴더 위치 구하기 (0) | 2022.05.03 |
---|---|
C언어 파일 크기 구하기 함수 filesize() (0) | 2022.04.30 |
C언어 하위 디렉터리까지 생성 디렉터리 만들기 함수 (0) | 2022.04.29 |