1 Востаннє редагувалося cheappi386 (16.03.2017 07:17:48)

Тема: Дивина з GetFileSizeEx

Повертає TRUE , але в LARGE_INTEGER розмір лівий, 49 кілобайт при розмірі файла більше 13 мегабайт.

void LoadIpData(wchar_t *dataPlace, std::vector <std::string> &data)
{
    HANDLE f = CreateFile(dataPlace, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
    if (f != INVALID_HANDLE_VALUE)
    {
        LARGE_INTEGER *sz = new LARGE_INTEGER;
        GetFileSizeEx(f, sz);
        unsigned char *buf = new unsigned char[sz->QuadPart];
        DWORD r = 0;
        ReadFile(f, buf, sz->QuadPart, &r, 0);
        __int64 totalSize = sz->QuadPart;
        unsigned char partSize = 0;
        char ip[16];
        printf("H: %d L: %d Q: %d\n",sz->HighPart, sz->LowPart, sz->QuadPart);
        //printf("%d\n%d", r, sz->QuadPart); 
        _getch();
        for (;;)
        {
            partSize = buf[0];
            printf("%X", buf[0]); _getch();
            buf += 1;
            totalSize = totalSize - 1;
            memset(ip, 0, 16);
            memcpy(ip, buf, partSize);
            buf += partSize;
            totalSize = totalSize - partSize;
            data.push_back(std::string(ip));
            if (totalSize < 1) { break; }
        }
        buf-= sz->QuadPart;
        delete[]buf;
        delete sz;
    }
    else
    {
        printf("%d", GetLastError());
    }
    CloseHandle(f);
}

2

Re: Дивина з GetFileSizeEx

Я так розумію, проблема виявляється у рядку, вищому за закоментований?
Будь ласка, також наведіть виклик функції LoadIpData (з назвою файлу) та скріншот explorer-а (вивід dir) із цим файлом.

3

Re: Дивина з GetFileSizeEx

Тут може бути ціла купа причин включаючи віртуалізацію файлової системи.

4

Re: Дивина з GetFileSizeEx

Вибачаюсь, сам винуват, парсив не той файл  *WALL*

Подякували: 0xDADA11C7, koala, /KIT\3