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 ); |