代码之家  ›  专栏  ›  技术社区  ›  photo_tom

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

  •  2
  • photo_tom  · 技术社区  · 14 年前

    我在网上找到了一个很好的递归例程来读取磁盘上文件的大小-

    __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 回复  |  直到 10 年前
        1
  •  5
  •   Mark    14 年前

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