C++比较两个文件

C++比较两个文件,第1张

#include<iostream>

#include<fstream>

using namespace std

int main(int argc, char *argv[]){

if(argc!=3){

cerr <<"命令行喊物格式错,请使用格式:\n程序名 文件名1 文件名2\n"

return 1

}

ifstream fin1(argv[1],ios::binary)

ifstream fin2(argv[2],ios::binary)

if(!fin1 || !fin2){

cerr <<掘梁"打开文件时出错。请检查文件名:\n" <<argv[1] <<"或:\n" <<argv[2] <<endl

return 1

}

fin1.seekg(0, ios::end)

fin2.seekg(0, ios::end)

if(fin1.tellg()!=fin2.tellg()){

fin1.close()

fin2.close()

cout <<"Dif\n"

return 0

}

fin1.seekg(0,ios::beg)

fin2.seekg(0,ios::beg)

int r1,r2

char b1[512],b2[512]

fin1.read(b1,512)

fin2.read(b2,512)

r1=fin1.gcount()

r2=fin2.gcount()

if(r1!=r2){

fin1.close()

fin2.close()

cerr <<"读文件时出错。\n"

return 1

}

int i

while(!fin1.eof()){

for(i=0i<r1i++){

if(b1[i]!=b2[i]){

fin1.close()

fin2.close()

cout <<"郑散液Dif\n"

return 0

}

}

fin1.read(b1,512)

fin2.read(b2,512)

r1=fin1.gcount()

r2=fin2.gcount()

if(r1!=r2){

fin1.close()

fin2.close()

cerr <<"读文件时出错。\n"

return 1

}

}

fin1.close()

fin2.close()

cout <<"Same\n"

return 0

}

1)程序运行开始的时候,提示输出两个文件的路径;

2)程序一行一行比较,当其中有一行不一样的时候,提示文茄弯件内容不同的行数以及内容;

3)如果文件内容一样,提示用户内容一样。

package buffered

import java.io.*

import java.lang.String

import java.util.Scanner

public class BufferedTest

{

public static void main(String[] args){

try{Scanner readr=new Scanner(System.in)<br/>System.out.println("输入第一个文件的路径及文件名:")<br/>String file1=readr.next()<br/>System.out.println("输入第二个文件的路径及文件名:")<br/>String file2=readr.next()<br/>FileReader inOne1=new FileReader(file1)<br/唯纳罩>BufferedReader inTwo1=new BufferedReader(inOne1)<br/>String s1=null<br/>int i=0//行数 <br/>boolean b=true//检察是行数 <br/>FileReader inOne2=new FileReader(file2)<br/>BufferedReader inTwo2=new BufferedReader(inOne2)<br/>String s2=null<br/>//文件内容对比 <br/>while((s1=inTwo1.readLine())!=null){ <br/>i++<br/>while((s2=inTwo2.readLine())!=null){ <br/><br/>if(s1.equals(s2)!=true){ <br/>System.out.println("第"+i+"行:"+s1+"和"+s2+"内容不一样")<br/>b=false<br/指闹>}

break

}

}

if(b){System.out.println("文件内容一样")}

}

catch(IOException e){

System.out.println(e)

}

}

}

本不想来啰嗦,但销镇楼上的程序的确有缺陷。

如果两个文件长度不同,上面的程序就会得出错误结果。比如头一个文件内容为:abcde第二个文件内容为:abcdefg会得出错误结果。

程序改写如下,已编译通过:

#include

<stdio.h>

#include

<stdlib.h>

int

main(){

FILE

*

f1

=

fopen("dd.txt","r")/*

改戚颂为实际文件名

*/

FILE

*

f2

=

fopen("bb.txt","r")

char

c1

=

fgetc(f1)

char

c2

=

fgetc(f2)

while(!feof(f1)

&&

!feof(f2)){

if(c1

!=

c2){printf("NO")system("pause")return

0}

c1

=

fgetc(f1)

c2

=

fgetc(f2)

}

if(c1==EOF&&c2==EOF)

/*

判断两个文件是否高斗郑都到结尾

*/

printf("YES")

else

printf("NO")

printf("\n")

fclose(f1)

fclose(f2)

system("pause")

return

0

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12296670.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存