Занимался проверкой файлов и возник вопрос как бы сделать это быстрее?
Код:
bool CheckSum(string newfile, int newfilesize, int newchecksum)
{
int flenght = newfilesize; //4696403; //FSIZE
int sum = newchecksum; //858273431; //CSUM
FILE* f;
if (!(f = fopen(newfile.c_str(), "rb")))
{
return false;
}
byte b;
unsigned int Csum = 0;
unsigned int Fsize = 0;
while (fread(&b, sizeof(byte), 1, f))
{
Fsize++;
Csum += b;
}
fclose(f);
//DEBUG: для генерации (CSUM) и размера файла (FSIZE) убрать комменты
/*ofstream myfile("CheckFiles_"+ newfile +".txt");
if (myfile.is_open())
{
myfile << "!CheckSum(\"" << newfile.c_str() << "\", " << Fsize << ", " << Csum << ") || \n";
myfile.close();
}*/
//DEBUG: для генерации (CSUM) и размера файла (FSIZE) убрать комменты
//INFO: убрать в комменты когда нужна генерация, можно сделать и boolean потом
if (Csum != sum || flenght != Fsize)
{
return false;
}
//INFO: убрать в комменты когда нужна генерация, можно сделать и boolean потом
return true;
}
//Здесь если поставить в if (CheckSum("ALAudio.dll", 150548, 13108215)) {} даст true или false в сравнении файла
//Когда включен режим генерации, это просто передает только путь до файла
CheckSum("ALAudio.dll", 150548, 13108215)