Frage zu ZLIB



  • HALLO.

    ich habe eine frage zur ZLIB-LIBRARY, die ich mir von www.zlib.net heruntergeladen habe. das beispiel, dass auf diesen seiten aufgeführt wird, habe ich ausprobiert, wie im quellcode unten zu sehen ist. das programm läuft auch problemlos durch und eine gz-datei wird ebenfalls erstellt. leider kann ich die mit keinem gängigen zip-programm öffnen. kann mir vielleicht jemand sagen, was ich falsch gemacht habe?

    VIELEN DANK!
    V.K.

    int ret, flush;
    			unsigned have;
    			z_stream strm;
    			unsigned char in[CHUNK];
    			unsigned char out[CHUNK];
    
    			// allocate deflate state
    			strm.zalloc = Z_NULL;
    			strm.zfree = Z_NULL;
    			strm.opaque = Z_NULL;
    			ret = deflateInit(&strm, Z_DEFAULT_COMPRESSION);
    			if (ret != Z_OK)
            return;
    
    			FILE *source;
    			FILE *dest;
    
    			source = fopen ("D:/erg4.bmp","r");
    			dest   = fopen ("D:/test.gz","w");
    
    			// compress until end of file
    			do 
    			{
            strm.avail_in = fread(in, 1, CHUNK, source);
            if (ferror(source)) 
    				{
    					(void)deflateEnd(&strm);
    					return;
            }
            flush = feof(source) ? Z_FINISH : Z_NO_FLUSH;
            strm.next_in = in;
            do 
    				{
    					strm.avail_out = CHUNK;
    					strm.next_out = out;
    					ret = deflate(&strm, flush);    // no bad return value 
    					assert(ret != Z_STREAM_ERROR);  // state not clobbered 
    
    					have = CHUNK - strm.avail_out;
    					if (fwrite(out, 1, have, dest) != have || ferror(dest)) 
    					{
    						(void)deflateEnd(&strm);
    						return ;
    					}					
            } while (strm.avail_out == 0);
            assert(strm.avail_in == 0);     // all input will be used
    
            // done when last data in file processed 
    			} while (flush != Z_FINISH);
    			assert(ret == Z_STREAM_END);        // stream will be complete 
    
    			// clean up and return 
    			(void)deflateEnd(&strm);
    
    			fclose (source);
    			fclose (dest);
    


  • definier bitte "gängiges zip programm". zip != gz. zum einen ist gzip ein dateiformat (und ein programm), das nicht wie zip eine ordnerstuktur bietet. die kombination aus tar und gzip (bzw. bzip2) bietet die gleichen features wie zip. außerdem ist noch die frage, welche fehlermeldung kommt und ob du schon mal probiert hast, die datei per gzip zu entpacken.



  • "r" => "rb"
    "w" => "wb"



  • Zumindest unter Windows ist das obige "b" wichtig, unter Linux wird da kein Unterschied gemacht.

    Gruß Kimmi


Anmelden zum Antworten