Извлечь CAB-файл, FDIIsCabinet продолжает возвращать false - PullRequest
0 голосов
/ 24 апреля 2019

Я использую этот простой метод

bool bk = cabber.OpenExtractCAB( "C:\\xx\\xx\\INSTALL.CAB",  "C:\\xx\xx\\");

Что реализовано таким образом

BOOL OpenExtractCAB( char * cCABFullPath, char * cDestinationFolder )
{
    FDICABINETINFO  fdici;
    int             hf;
    char            *p;

    // Set up some important globals
    g_hfdi = NULL;
    g_pFDIProgress = NULL;

    g_hfdi = FDICreate(
        fdi_mem_alloc,
        fdi_mem_free,
        fdi_file_open,
        fdi_file_read,
        fdi_file_write,
        fdi_file_close,
        fdi_file_seek,
        cpu80386,
        &g_fdi_erf
    );

    if (g_hfdi == NULL)
    {

        return FALSE;
    }

    /*
     * Is this file really a cabinet?
     */
    hf = fdi_file_open(
        cCABFullPath,
        _O_BINARY | _O_RDONLY | _O_SEQUENTIAL,
        0
    );

    if (hf == -1)
    {
        return FALSE;
    }

    if (FALSE == FDIIsCabinet(
            g_hfdi,
            hf,
            &fdici))
    {
        /*
         * No, it's not a cabinet!
         */
        _close(hf);   
        return FALSE;
    }

Я не публикую остальную часть функции, но на этом она останавливается, и я не понимаю, почему функция FDI, которая проверяет, является ли мой файл CAB или нет, продолжает возвращать false .. когда мой файл явно CAB-файл. Отладка это hf = 0, но я не знаю, как отладить остальные и посмотреть, что на самом деле идет не так

...