|
常にバイナリモードで比較していますので、テキストファイルで長さの
違うものを比較しても、「短いです」の表示は出ません。
通常はバイナリとテキストの比較をスイッチで切り替えられるようにし
ておくと便利です。
使い方: diff file1 file2
(このプログラムをfile.cとして保存しコンパイル)
#include <stdio.h>
#include <stdlib.h>
int main(int ac, char *av[])
{
FILE *fi1, *fi2;
int c, d;
if (ac != 3) {
printf("使い方: diff file1 file2\n");
exit(1);
}
if ((fi1 = fopen(av[1], "rb")) == NULL) {
printf("ファイル '%s' が見つかりません。\n", av[1]);
exit(1);
}
if ((fi2 = fopen(av[2], "rb")) == NULL) {
printf("ファイル '%s' が見つかりません。\n", av[2]);
exit(1);
}
while (1) {
c = fgetc(fi1);
d = fgetc(fi2);
if (c == EOF && d == EOF) break;
if (c == EOF && d != EOF) {
printf("ファイル '%s' の方が短いです。\n", av[1]);
exit(1);
} else if (c != EOF && d == EOF) {
printf("ファイル '%s' の方が短いです。\n", av[2]);
exit(1);
} else if (c != d) {
printf("ファイル '%s' と ファイル '%s' は違います。\n", av[1], av[2]);
exit(1);
}
}
printf("ファイル '%s' と ファイル '%s' は同一です。\n", av[1], av[2]);
fclose(fi1);
fclose(fi2);
return 0;
}
|