c++ builder 比较文本文件内容是否相同

//有需要比较两个文本文件内容是否相同的情况,比如参数等,方法:逐行比较

 #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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值