//有需要比较两个文本文件内容是否相同的情况,比如参数等,方法:逐行比较
#include <vcl.h>
#include <fstream>
#include <iostream>
using namespace std;
bool FileCompare(String file1,String file2,String outfile)//比较函数,如果不同,输出到outfile
{
char buffer[2000]={0};char buffer2[2000]={0};//每行都读到字符串数组,
int LineMaxlen=1900;
int i=0;
bool IsSame[5000]={false};//是否相同的数组,最多5000行
bool SameTemp=true;//最终比较结果
ifstream f1(file1.c_str());
ifstream f2(file2.c_str());
if (f1.is_open() && f2.is_open())//条件:两个文件都打开
{
ofstream f3(outfile.c_str());
bool IsOpen=f3.is_open();
bool firstTime=false;
while (!f1.eof() ||!f2.eof() )//退出while循环条件:读到末尾
{ f1.getline (buffer,LineMaxlen);//读第1个文件的一行到buffer
f2.getline (buffer2,LineMaxlen);//读第2个文件的一行到buffer2
//cout <<i<<"1,"<<"len="<<strlen(buffer)<<","<< buffer << endl;
//cout <<i<<"2,"<<"len="<<strlen(buffer2)<<","<< buffer2 << endl;
IsSame[i]=(*buffer==*buffer2);//比较两个文件的每一行,比较结果放到数组
//cout<<i<<","<<IsSame[i]<<endl;
SameTemp=SameTemp&&IsSame[i];//
if (IsOpen && !IsSame[i])
{
if (!firstTime)
{
TDateTime dt=Now();
unsigned short year,month,day;
unsigned short hour,min,sec,msec;
dt.DecodeDate(&year,&month,&day);
dt.DecodeTime(&hour, &min,&sec, &msec);
f3<<year<<"."<<month<<"."<<day<<" "<<hour<<":"<<min<<":"<<sec<<"修改参数"<<endl;
firstTime=true;
}
f3 <<"line"<<i+1<<"不同"<<endl;
f3 <<"file1:"<<buffer<<endl;
f3 <<"file2:"<<buffer2<<endl;
sprintf(buffer,"%s","");
sprintf(buffer2,"%s","");
}
i++;
//if (i>5000) break;
}
f1.close();
f2.close();
f3.close();
//cout<<SameTemp;
}
return SameTemp;
}
int main(int argc, char* argv[])//c++ builder 6.0
//int _tmain(int argc, _TCHAR* argv[])//c++ builder 10.3
{
cout<<FileCompare("d:\\test111\\test333.txt",
"d:\\test333.txt","d:\\output.txt")<<endl;
system("pause");
return 0;
}