done.
> About identical check of new and existing file in builder.
>
> Currently there is a limit of file size defined by "bufferLength".
> When the file size exceed the size, the file will be always overwritten by builder.
> And if the file is existing task cpp file, user will lose a part of his code.
>
> Actually, LPConfig.cpp is larger than that.
>
> So I wrote a simple function. it will be called recursively when the file is larger than buffer.
> bufferLength is not necessary to be so large.
>
> bool checkIdentical(const int fileHandle,const char* pattern,bool flag=true)
> {
> static int position
> int i;
> char fileBuffer[bufferLength];
>
> if(flag)
> position = 0;
>
> int nb = read(fileHandle,&fileBuffer, sizeof(fileBuffer));
>
> if(nb == bufferLength){
> if((int)strlen(pattern)-position < bufferLength)
> return false;
>
> for (i=0;i<nb;i++)
> if (pattern[position+i] != fileBuffer[i])
> return false;
> position += bufferLength;
> return checkIdentical(fileHandle,pattern,false);
> }
> else{
> if (nb != (int)strlen(pattern) - position)
> return false;
>
> for (i=0;i<nb;i++)
> if (pattern[position+i] != fileBuffer[i])
> return false;
> }
> return true;
> }
>
>
> You may use this function in builder like,
> int fileHandle = open("test.txt",O_RDONLY);
> bool identical = checkIdentical(fileHandle,buffer);
> close(fileHandle);
>
> And there is another way. TString can read file. this featrue can be used when you read existing Task cpp file.
>
> ifstream ifile("test.txt");
> TString fileBuffer;
> str.ReadFile(ifile);
> bool identical = ( fileBuffer == buffer ); |