일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- 포인터
- Vim
- Google reCaptcha
- Naver SmartEditor
- jsp
- placehoder
- C언어 매크로
- java
- 오라클
- HTML5
- Oracle
- 역순
- C언어
- 구글 reCaptcha
- URL 다운로드
- 자바
- TCP/IP 소켓
- C언어 메모리
- SQL
- C언어 변수
- GUI
- 날짜
- C언어 파일입출력
- C언어 배열
- C언어 구조체
- Spring email
- C언어 함수
- Spring google
- 텍스트 파일 읽기
- gcc
- Today
- Total
easy software
C언어 두개의 파일이 같은지를 검사해보자 본문
이번 글에서는 파일 입출력 함수들을 이용한 간단한 예제를 소개해 드리겠습니다.
제목과 동일하게 파일 두개가 같은지를 검사하는 프로그램입니다.
두개의 텍스트 파일이 있으면, 공백하나까지 모두 같아야 같은 파일이라고 안내해 줘야 합니다.
만약 띄어쓰기 하나라도 다르다면, 다른 파일이라고 안내해야 합니다.
실행 파일의 이름이 comp.exe이고 비교대상의 파일이 mystory.txt 와 mystory2.txt 이면
아래와 같이 실행되어야 합니다.
실행의 예
C:\test>comp mystroy.txt mystory2.txt
두 개의 파일은 일치합니다.
프로그램의 코드는 생각보다 무척 간단합니다.
코드를 보고난 후에 설명드리겠습니다.
#include <stdio.h>
//문자열을 입력받기 위해 main에 매개변수를 정해줌
int main(int argc, char** argv){
FILE* fp1;
FILE* fp2;
int state1, state2;
char a, b;
//사용자가 입력을 잘못할 경우에 오류발생
if (argc != 3){
printf("[실행파일이름 텍스트파일이름 텍스트파일이름] 형식으로 입력하세요.\n");
return 1;
}
//사용자가 입력한 이름의 텍스트 파일을
//rt모드로 스트림 생성
fp1 = fopen(argv[1], "rt");
fp2 = fopen(argv[2], "rt");
/* fopen함수는 오류발생시 NULL을 리턴하므로
파일 개방 중 오류발생시 프로그램을 종료 */
if (fp1 == NULL || fp2 == NULL){
printf("스트림 생성시 오류발생\n");
return 1;
}
// 두개의 파일에 저장된 데이터를 비교함
while (1){
//두개의 파일 모두 끝에 도달하지 않을 경우
if (feof(fp1) == 0 && feof(fp2) == 0){
a = fgetc(fp1);
b = fgetc(fp2);
if (a != b){
printf("두개의 파일은 일치하지 않습니다.\n");
break;
}
}
//하나의 파일만 끝에 도달할 경우
else if (feof(fp1) != 0 && feof(fp2) == 0){
printf("두개의 파일은 일치하지 않습니다.\n");
break;
}
//하나의 파일만 끝에 도달할 경우
else if (feof(fp1) == 0 && feof(fp2) != 0){
printf("두개의 파일은 일치하지 않습니다.\n");
break;
}
//두개의 파일 모두 끝에 도달한 경우.
//(첫 번째 조건문에서 각 파일의 문자는 검사했기 때문에
//두 파일이 동시에 feof에 의해 탈출하면 동일한 파일인 것)
else{
printf("두개의 파일은 일치합니다.\n");
break;
}
}
/* fclose함수는 종료시 오류가 발생하면
0이 아닌 다른값을 리턴하므로 비정상 종료로 판단되면
안내후 프로그램을 종료 */
state1 = fclose(fp1);
state2 = fclose(fp2);
if (state1 != 0 || state2 != 0){
printf("스트림 제거시 오류발생\n");
return 1;
}
return 0;
}
주석이 너무 잘 작성되어 있어서 코드 설명은 간단히 드리겠습니다.
처음에 사용자가 입력한 텍스트 파일과의 스트림을 생성합니다.
이후에는 feof함수와 각종 조건문을 통해서 파일안에 저장된 데이터가 같은지 비교합니다.
만약에, 두 파일모두 끝에 도달하지 않았다면, fgetc를 이용하여 데이터를 변수에 저장하고,
그 변수들을 비교하여 데이터가 같은지 확인합니다.
두개의 파일중에 하나의 파일만 먼저 종료될 경우에는,
저장된 데이터가 다르다는 의미이므로 일치하지 않다는 문구가 출력됩니다.
만약 동시에 두개의 파일이 모두 종료된다면, 이미 첫번째 조건문에서
데이터가 같다는 점은 비교하였기 때문에, 일치함을 출력해 줍니다.
아래는 실제 실행화면입니다. 참고해서 보시기 바랍니다.
두개의 텍스트 파일이 같은 경우
두개의 텍스트 파일이 다른 경우(mystory.txt 중간에 엔터키를 입력했음)
'C언어 > FILE IO' 카테고리의 다른 글
C언어 txt파일에 저장된 단어들의 첫번째 글자를 구분해보자(fscanf 사용) (0) | 2015.02.28 |
---|---|
C언어 파일입출력 main에서 파일명을 받아 파일복사하기 (0) | 2015.02.12 |
C언어 파일입출력 feof함수를 알아보자 (0) | 2015.02.12 |
C언어 fopen fclose fputs을 이용하여 파일입출력을 해보자2 (0) | 2015.02.12 |
C언어 fopen fclose fputs을 이용하여 파일입출력을 해보자1 (0) | 2015.02.12 |