Тема: Відновлення даних з образа флешки за відсутності файлової системи
Всім привіт. Спіткала така біда, на флешці з дорогоцінними фото злетіла файлова система. CD-картка з фотоапарата на 32 Гб, на ній востаннє було 411 фото, але після того як з файловою системою сталась біда, звичайно ж комп бачить що всі 30 Гб зайняті чимось, і це не що інше як старі фото. Так ось, я колись вже відновлював фотографії виконуючи задачку з курсів по програмуванню CS50, програмка залишилась.
Зробив образ флешки і трохи змінив програму, все працює, але не довго. Відновлює максимум 507 фото з початку, і зупиняється. Коли за допомогою fseek переходжу в кінець файлу - і ftell-ом дивлюсь позицію - показує максимум 6422144 байт. 
Можливо ви підкажете як вийти за ці межі?
Ось код:
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h> 
int main(int argc, char* argv[])
{
    FILE* cpcard = fopen("raw.img", "rb");
    if (cpcard == NULL)
    {
        printf("could not open file");
        return 1;
    } 
    uint8_t bufer[4];
    int count = 0;
    uint8_t check[5]  = {0xff, 0xd8, 0xff, 0xe0, 0xe1};
    FILE* picture;
    char nameFile[9] = {'0', '0', '0', '/', '.', 'j', 'p', 'g', '\0'};
    int    flag = 0; 
    int i;
    fseek(cpcard, 0, SEEK_END);
    long long len = ftell(cpcard);
    printf("%d", &len);
    fseek(cpcard, 0, SEEK_SET);
    for (i=0; i++; i<1024)
        fseek(cpcard, 6422144, SEEK_SET);
       while (fread(&bufer, 4, 1, cpcard) > 0)
       {
           if (bufer[0] == check[0] &&  bufer[1] == check[1] && 
               bufer[2] == check[2] && (bufer[3] == check[3] || bufer[3] == check[4]))
           {
//               printf('True\n');
            picture = fopen(nameFile, "wb");
            if (nameFile[3] == '9')
            {
                if (nameFile[2] == '9')
                {
                    if (nameFile[1] == 9)
                    {
                        nameFile[1] = '0';
                        nameFile[2] = '0';
                        nameFile[3] = '0';
                        nameFile[0]++;
                    }
                    else
                    {
                        nameFile[1]++;
                        nameFile[2] = '0';
                        nameFile[3] = '0';
                    }
                }
                else
                {
                    nameFile[2]++;
                    nameFile[3] = '0';
                }
            }
            else nameFile[3]++;
            
            fwrite(&bufer, 4, 1, picture);
            
            while(fread(&bufer, 4, 1, cpcard) > 0)
            {
                if (bufer[0] == check[0] &&  bufer[1] == check[1] && 
                   bufer[2] == check[2] && (bufer[3] == check[3] || bufer[3] == check[4]))
                   {
                       count++;
//                          printf("%d\n", &count);    
                       break;
                }
                fwrite(&bufer, 4, 1, picture);
            }
           }
       }
       
    fclose(cpcard);
    fclose(picture);
    return 0;
}Сам я на С дуже давно не пишу, більше 2 років, все забув вже. Буду дуже вдячним за допомогу.
Можете запропонувати якісь інші методи відновлення даних, дієві. Але задачку з цією програмкою хотілось би все таки вирішити.
Може можна якось файл такого розміру розбити на менші файли?
