Как проверить фрагмент файла в другом файле на Си?

У меня есть бинарный файл (вирус). Его содержимое есть в другом бинарном файле. Мне нужно проверить, содержит ли проверяемый файл этот вирус.

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);
→ Ссылка