在NTFS压缩目录中,如何读取压缩和未压缩文件的文件?

pho*_*tom 2 c++ compression ntfs c++builder

在我们的应用程序中,我们生成一些大型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;
}
Run Code Online (Sandbox Code Playgroud)

但我找不到有关如何读取压缩/未压缩文件大小信息的任何信息.关于在哪里看的建议?

Mar*_*ark 5

Win32 API GetFileSize将返回未压缩的文件大小.API GetCompressedFileSize将返回压缩文件大小.