OS : Linux 우분투 버전 18.04
컴파일러 : gcc 7.5
[명세]
이미 존재하는 두 개의 파일, <파일1>과 <파일2>의 데이터를 병합한 새로운 파일 <파일3>을 생성한다. 병합은 <파일1>과 <파일2>의 순서를 따르며, <파일3>의 크기는 입력된 두 개의 파일의 크기의 합과 정확히 일치해야 한다.
a.out <파일명1> <파일명2> <파일명3>
[소스 코드] - merge.c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char *argv[]){
FILE *fp1 = fopen(argv[1],"r");
FILE *fp2 = fopen(argv[2],"r");
FILE *fp3 = fopen(argv[3],"w");
// 파일크기 구하기
int size1,size2,size3;
fseek(fp1,0,SEEK_END);
size1 = ftell(fp1); // 파일1의 크기
fseek(fp2,0,SEEK_END);
size2 = ftell(fp2); // 파일2의 크기
fseek(fp1, 0, SEEK_SET);
fseek(fp2, 0, SEEK_SET);
char *buffer1 = (char *)malloc(sizeof(char)*size1);
char *buffer2 = (char *)malloc(sizeof(char)*size2);
while(!(feof(fp1))){ // 첫번째 파일 복사
memset(buffer1, 0, sizeof(buffer1));
fread(buffer1, sizeof(char), sizeof(buffer1), fp1);
fwrite(buffer1, sizeof(char), strlen(buffer1),fp3);
}
while(!feof(fp2)){ // 두번째 파일 복사
memset(buffer2, 0, sizeof(buffer2));
fread(buffer2, sizeof(char), sizeof(buffer2),fp2);
fwrite(buffer2, sizeof(char), strlen(buffer2),fp3);
}
fclose(fp1);
fclose(fp2);
fclose(fp3);
return 0;
}
'파일처리' 카테고리의 다른 글
[C언어_파일처리] 오프셋과 바이트 수를 이용해 파일에 있는 값 삭제하기 (delete) (0) | 2022.04.04 |
---|---|
[C언어_파일처리] 파일에서 오프셋을 기준으로 데이터 끼워넣기 (insert) (0) | 2022.04.04 |
[C언어_파일처리] 파일에 데이터 덮어쓰기 (overwrite) (0) | 2022.04.04 |
[C언어_파일처리] 오프셋, 바이트 수를 기준으로 파일 읽기 (read) (0) | 2022.04.04 |
[C언어_파일처리] 파일 복사하기 (copy) (0) | 2022.04.04 |