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

发布于 2024-09-14 18:37:50 字数 1800 浏览 6 评论 0原文

在我们的应用程序中,我们将一些大型 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;
}

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

In our application, we are generating some large ASCII log files to an Windows NTFS compressed directory. My users want to know both the compressed and uncompressed size of the files on a status screen for the application. We are using Rad Studio 2010 C++ for this application.

I found this nice recursive routine online to read the size of the files on the disk -

__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;
}

But what I cannot find is any information on how to read compressed/uncompressed file size information. Suggestions on where to look?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

安穩 2024-09-21 18:37:50

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

The Win32 API GetFileSize will return the uncompressed file size. The API GetCompressedFileSize will return the compressed file size.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文