Как проверить фрагмент файла в другом файле на Си?
У меня есть бинарный файл (вирус). Его содержимое есть в другом бинарном файле. Мне нужно проверить, содержит ли проверяемый файл этот вирус.
Cпасибо тем кто пытался мне помочь. Оставляю для вас ответ. Надеюсь он вам тоже поможет если у вас будет такое же задание :)
long sizeFile;
long sizeVirus;
char* virusData = 0;
char* fileData = 0;
int i = 0, j = 0, checkCounter = 0, flag = 0;
FILE* file = NULL;
FILE* virus = NULL;
file = fopen(fileToCheck, "rb");
virus = fopen(virusToFind, "rb");
if (file == NULL)
{
printf("\n\nCannot open file: %s", fileToCheck);
return 1;
}
else
{
printf("\nSuccess opening file %s\n", fileToCheck);
if (file == NULL)
{
printf("\n\nCannot open file: %s", virusToFind);
return 1;
}
else
{
printf("\nSuccess opening file %s\n", virusToFind);
}
fseek(file, 0, SEEK_END); // file size
sizeFile = ftell(file);
printf("\nLong file is %ld", sizeFile);
fseek(virus, 0, SEEK_END); // file size
sizeVirus = ftell(virus);
printf("\nLong virus is %ld", sizeVirus);
fseek(file, 0, SEEK_SET);
fseek(virus, 0, SEEK_SET);
virusData = (char*)malloc(sizeof(char) * sizeVirus);
fileData = (char*)malloc(sizeof(char) * sizeFile);
// Enterning virus to array
fread(fileData, 1, sizeFile, file);
fread(virusData, 1, sizeVirus, virus);
while ((i + sizeVirus) < sizeFile)
{
//printf("\nWhile %d\n",i);
//fgets(fileData, sizeVirus, file);
if (memcmp(virusData, fileData + i, sizeof(virusData)) == 0)
{
printf(" INFECTED\n");
flag = 1;
//return 1;
break;
}
i++;
}
}
if (flag != 1)
{
printf("\nClean\n");
}
//getchar();
free(fileData);
free(virusData);
fclose(file);
fclose(virus);
Ответы (1 шт):
Автор решения: rambocherepaxa blitz
→ Ссылка
Мой ответ здесь. Пользуйтесь
long sizeFile;
long sizeVirus;
char* virusData = 0;
char* fileData = 0;
int i = 0, j = 0, checkCounter = 0, flag = 0;
FILE* file = NULL;
FILE* virus = NULL;
file = fopen(fileToCheck, "rb");
virus = fopen(virusToFind, "rb");
if (file == NULL)
{
printf("\n\nCannot open file: %s", fileToCheck);
return 1;
}
else
{
printf("\nSuccess opening file %s\n", fileToCheck);
if (file == NULL)
{
printf("\n\nCannot open file: %s", virusToFind);
return 1;
}
else
{
printf("\nSuccess opening file %s\n", virusToFind);
}
fseek(file, 0, SEEK_END); // file size
sizeFile = ftell(file);
printf("\nLong file is %ld", sizeFile);
fseek(virus, 0, SEEK_END); // file size
sizeVirus = ftell(virus);
printf("\nLong virus is %ld", sizeVirus);
fseek(file, 0, SEEK_SET);
fseek(virus, 0, SEEK_SET);
virusData = (char*)malloc(sizeof(char) * sizeVirus);
fileData = (char*)malloc(sizeof(char) * sizeFile);
// Enterning virus to array
fread(fileData, 1, sizeFile, file);
fread(virusData, 1, sizeVirus, virus);
while ((i + sizeVirus) < sizeFile) // forbidden FEOF for (progress < ftell
{
//printf("\nWhile %d\n",i);
//fgets(fileData, sizeVirus, file);
if (memcmp(virusData, fileData + i, sizeof(virusData)) == 0)
{
printf(" INFECTED\n");
flag = 1;
//return 1;
break;
}
i++;
//printf("\nAfter cleaning File %s\n",fileData);
//getchar();
}
}
if (flag != 1)
{
printf("\nClean\n");
}
//getchar();
free(fileData);
free(virusData);
fclose(file);
fclose(virus);