В NTFS Compressed Directory, как читать файлы сжатых и несжатого размера? - PullRequest
2 голосов
/ 18 августа 2010

В нашем приложении мы генерируем несколько больших файлов журнала ASCII в сжатый каталог Windows NTFS. Мои пользователи хотят знать размер сжатых и несжатых файлов на экране состояния приложения. Мы используем Rad Studio 2010 C ++ для этого приложения.

Я нашел эту замечательную рекурсивную процедуру в Интернете, чтобы прочитать размер файлов на диске -

__int64 TransverseDirectory(string path)
{
    WIN32_FIND_DATA data;
    __int64 size  = 0;
    string  fname = path + "\\*.*";
    HANDLE  h     = FindFirstFile(fname.c_str(), &data);

    if (h != INVALID_HANDLE_VALUE)
    {
        do
        {
            if ((data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
            {
                if (strcmp(data.cFileName, ".") != 0 && strcmp(data.cFileName, "..") != 0)
                {
                    // We found a sub-directory, so get the files in it too
                    fname = path + "\\" + data.cFileName;
                    // recurrsion here!
                    size += TransverseDirectory(fname);
                }
            }
            else
            {
                LARGE_INTEGER sz;
                sz.LowPart  = data.nFileSizeLow;
                sz.HighPart = data.nFileSizeHigh;
                size       += sz.QuadPart;
                // ---------- EDIT ------------ 
                if (data.dwFileAttributes & FILE_ATTRIBUTE_COMPRESSED)
                     {
                       unsigned long doNotCare;
                        fname = path + "\\" + data.cFileName;
                        DWORD lowWordCompressed = GetCompressedFileSize(fname.c_str(),
                        &doNotCare);
                        compressedSize += lowWordCompressed;
                      }
                // ---------- End EDIT ------------ 
            }
        }
        while (FindNextFile(h, &data) != 0);
        FindClose(h);
    }
    return size;
}

Но я не могу найти какую-либо информацию о том, как читать информацию о размере сжатого / несжатого файла. Предложения о том, где искать?

1 Ответ

5 голосов
/ 18 августа 2010

Win32 API GetFileSize возвращает размер несжатого файла. API GetCompressedFileSize вернет размер сжатого файла.

...