我知道如何檢查兩個文件是否有相同的內容。我使用了fopen
和fread
。不過,我在翻譯代碼時遇到了一些問題,請使用open
和read
代替fopen
和fread
。檢查(逐字節)兩個文件是否相等,在C中使用open(),read()
當我運行這樣的程序:./app file1.txt file2.txt
(和文件不相等)程序顯示消息,他們是不相等的,這是完全正確的。當我嘗試./app file1 file1
時,它也顯示文件不相等,這是不正確的。另一件事是,使用Code::Blocks
它顯示我返回代碼255
所以我的東西我搞砸了,但不是什麼。
#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
#include <errno.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <stdlib.h>
int CompareFileByteByByte(char *file1, char *file2)
{
int results = 0, c1, c2, br1, br2;
int fin1 = -1, fin2 = -1;
fin1 = open(file1, O_RDONLY);
fin2 = open(file2, O_RDONLY);
if (fin1 == -1)
{
perror ("open");
return -1;
}
if (fin2 == -1)
{
perror ("open");
return -1;
}
br1 = read (fin1, &c1, 1);
br2 = read (fin2, &c2, 1);
while((br1 > 0) && (br2 > 0) && results)
{
br1 = read (fin1, &c1, 1);
br2 = read (fin2, &c2, 1);
results = (c1 == c2);
printf("%c %c\n", c1, c2);
}
close(fin1);
close(fin2);
return results;
}
int main(int argc, char **argv)
{
if(argc < 3)
{
printf("Example usage:\n\n\t %s file1 file2\n\n", argv[0]);
exit(-1);
}
else
{
printf("%s %s\n", argv[1], argv[2]);
if(CompareFileByteByByte(argv[1], argv[2]))
{
printf("Files are equal\n");
}
else
{
printf("Files are NOT equal\n");
}
}
return 0;
}
做你嘗試比較file1和文件1的副本? – mch
@mch:是的,我做過了 - 結果與此處所述相同:它顯示這些文件不相等,程序的返回值爲255,而不是0. – yak
我不確定您的代碼適合將文件與自身進行比較:畢竟,它是爲了處理兩個不同的文件。 – user3078414