Maxon Developers Maxon Developers
    • Documentation
      • Cinema 4D Python API
      • Cinema 4D C++ API
      • Cineware API
      • ZBrush Python API
      • ZBrush GoZ API
      • Code Examples on Github
    • Forum
    • Downloads
    • Support
      • Support Procedures
      • Registered Developer Program
      • Plugin IDs
      • Contact Us
    • Categories
      • Overview
      • News & Information
      • Cinema 4D SDK Support
      • Cineware SDK Support
      • ZBrush 4D SDK Support
      • Bugs
      • General Talk
    • Recent
    • Tags
    • Users
    • Login

    ZIP library UncompressData()

    Scheduled Pinned Locked Moved SDK Help
    7 Posts 0 Posters 594 Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • H Offline
      Helper
      last edited by

      THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

      On 11/09/2008 at 21:22, xxxxxxxx wrote:

      User Information:
      Cinema 4D Version:   R9.5-R11 
      Platform:   Windows  ; Mac  ;  Mac OSX  ; 
      Language(s) :     C++  ;

      ---------
      Okay, a simple question:

      Does UncompressData() understand partial buffers due to file reads for zlib decompression?

      I'm reading a set number of bytes (per round) from a zlib-compressed file and then calling UncompressData(). So far, it always errors out at UncompressData(). I assume that the pDestData argument returns a pointer to a memory buffer that C4D allocated (thus the required GeFree()). ZBUFLEN = 65536L. I'm sorry - it is not possible to expect to be able to allocate a memory buffer to hold possible files (they may be in the hundreds of Megabytes!). Here's the method involved:

      > // Decompress infile into outfile, return outfile \> //\*---------------------------------------------------------------------------\* \> Bool myZLib::DecompressFile(const Filename& inname, const Filename& outname, char\* buf) \> //\*---------------------------------------------------------------------------\* \> { \>      AutoAlloc<BaseFile>     out; \>      AutoAlloc<BaseFile>     in; \>      if (!(in && out))          return FALSE; \> \>      if (!in->Open(inname, GE_READ, FILE_NODIALOG, GE_INTEL)) \>      { \>           GePrint("Error: in->Open"); \>           return FALSE; \>      } \>      if (!out->Open(outname, GE_WRITE, FILE_NODIALOG, GE_INTEL)) \>      { \>           GePrint("Error: out->Open"); \>           return FALSE; \>      } \> #ifdef     OS64 \>      VLONG     len; \> #else \>      LONG     len; \> #endif \>      LONG     olen; \>      char\*     obuf; \>      for (;;) \>      { \>           len = in->ReadBytes(buf, ZBUFLEN); \>           if (len < 0) \>           { \>                GePrint("Error: len < 0"); \>                return FALSE; \>           } \>           if (len == 0)     return TRUE; \>           if (!UncompressData(buf, len, (void\*&)obuf, olen)) \>           { \>                GePrint("Error: UncompressData"); // ALWAYS ERRORS HERE! \>                return FALSE; \>           } \>           if (!out->WriteBytes(obuf, olen)) \>           { \>                GeFree(obuf); \>                GePrint("Error: WriteBytes"); \>                return FALSE; \>           } \>           GeFree(obuf); \>      } \>      if (!out->Close()) \>      { \>           GePrint("Error: out->Close"); \>           return FALSE; \>      } \>      if (!in->Close()) \>      { \>           GePrint("Error: in->Close"); \>           return FALSE; \>      } \>      return TRUE; \> }

      Thanks,

      1 Reply Last reply Reply Quote 0
      • H Offline
        Helper
        last edited by

        THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

        On 11/09/2008 at 23:25, xxxxxxxx wrote:

        Hi!

        You only want to decrompress zip files?

        1 Reply Last reply Reply Quote 0
        • H Offline
          Helper
          last edited by

          THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

          On 11/09/2008 at 23:30, xxxxxxxx wrote:

          zlib compressed files. Zip files 'use' zlib compression but also include other information (such as folder/file structures). These files are simply compressed using zlib compression.

          1 Reply Last reply Reply Quote 0
          • H Offline
            Helper
            last edited by

            THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

            On 11/09/2008 at 23:32, xxxxxxxx wrote:

            I used the class "ZipFile" to extract a zip file with its directory structure. You are able to read and write comments, and other stuff too.

            A few lines are enough to extract the whole content of a zip file to a directory. A small code snippet:
            zlib
            See my last post.

            Bye...

            1 Reply Last reply Reply Quote 0
            • H Offline
              Helper
              last edited by

              THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

              On 11/09/2008 at 23:39, xxxxxxxx wrote:

              Supposedly, CompressData() and UncompressData() work with zlib compressed data.

              Remember that there is a difference between this and zip files. I've already tried using the 'zip' library on these files without success - because they aren't zip archives. They are just single files that have been zlib compressed (think RLE encoding).

              1 Reply Last reply Reply Quote 0
              • H Offline
                Helper
                last edited by

                THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

                On 11/09/2008 at 23:46, xxxxxxxx wrote:

                Hi!, ah, ok.. I see.. 🙂

                1 Reply Last reply Reply Quote 0
                • H Offline
                  Helper
                  last edited by

                  THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

                  On 13/09/2008 at 13:32, xxxxxxxx wrote:

                  Bumping this up.

                  Yes, indeed CompressData() and UncompressData() work if the full buffer is being compressed or decompressed. I converted all the zlib-compressed memory buffer code and these work splendidly.

                  It appears that, unlike the zlib stream support provided by gzOpen()/gzRead()/gzClose(), the C4D SDK routines cannot handle segmented buffer decompression - all or nothing. 'All' is not going to be a viable option here.

                  Any thoughts here?

                  1 Reply Last reply Reply Quote 0
                  • First post
                    Last post