Nadat ik eem ge-gzipte string heb ontvangen probeer ik met zlib deze te inflaten. Normaal gesproken nooit echt een probleem geweest. Maar nu ontvang in van zlib steeds de error code -3. Ik lees 121 bytes van een bestand en probeer deze dan te inflaten. Het gaat wel goed als ik het bestand open als een door middel van gzopen en dan inflate met gzread/gzgets. De code die ik gebruik staat hier onder en zegt waarschijnlijk meer dan dit stukje tekst.
Wat extra info, was niet de bedoeling om een indruk te wekken dat ik er zelf nog niet naar gekeken had en het hier maat neer donder. Zlib versie is 1.2.3, VS2005 standaart debug compile.
Ik heb google en got al afgezocht en niks kunnen vinden dat relevant is voor dir probleem. De string is namelijk wel gzip ok en als ik hem dus wegschrijf naar een file en daarna open met gz_open doen zich bij inflate geen problemen op. Weg schrijfen naar een file is natuurlijk niet echt handig omdat de data al in het gehuegen zit.
Ik heb ook al de gz_open code van zlib bestudeert maar die leest het bestand ook gewoon in en naar een z_stream. Ik hoop dus dat iemand me wat kan helpen hier mee, misschien vergeet ik iets belangrijks. Zelf staar ik me al uren dood op de code
.
Wat extra info, was niet de bedoeling om een indruk te wekken dat ik er zelf nog niet naar gekeken had en het hier maat neer donder. Zlib versie is 1.2.3, VS2005 standaart debug compile.
Ik heb google en got al afgezocht en niks kunnen vinden dat relevant is voor dir probleem. De string is namelijk wel gzip ok en als ik hem dus wegschrijf naar een file en daarna open met gz_open doen zich bij inflate geen problemen op. Weg schrijfen naar een file is natuurlijk niet echt handig omdat de data al in het gehuegen zit.
Ik heb ook al de gz_open code van zlib bestudeert maar die leest het bestand ook gewoon in en naar een z_stream. Ik hoop dus dat iemand me wat kan helpen hier mee, misschien vergeet ik iets belangrijks. Zelf staar ik me al uren dood op de code
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
| //log debug("Handle gzip data."); // decompress buffer std::string data; Bytef *rdata = new Bytef[2048]; uLongf *rsize = new uLongf(2048); std::string buffer2,buffer4,out; // prepare for file read char c; FILE *df = fopen ( "./data.gz" , "rb" ); // read file fread(&c,1,1,df); while (!feof(df)) { buffer4 += c; fread(&c,1,1,df); } /* * Het resultaat van de file is gelijk aan wat er in het geheugen staat * zlib_error print textueel de error naar de console * De util::decompress is een eigen layer over de streams van zlib heen. */ // inflate trough custom layer - result is bad util::zlib_error( util::decompress(buffer4,out) ); /* * uncompress methode zit standaart in zlib. Dit is ook een layer over de streams heen. * GetContentPtr() is de lenghte in bytes van de ge compressde data * rdata is het doel, en rsize de groote van het doel. * Naar decompressie wordt rsize de grote van het decompress resultaat (rdata dus). * Buffer4 is een std::string die gecast wordt naar een * Bytef (Byte far) die gedefined wordt in zlib.h * * buffer4.size()+1 is ook al geprobeert maar werkt helaas ook niet. */ // inflate trough zlib api layer - result is bad util::zlib_error( uncompress(rdata,rsize,(Bytef*)buffer4.c_str(),buffer4.size()) ); // try decompress file - result is good char *buffer3 = new char[2048]; gzFile fg = gzopen( "./data.gz", "rb" ); gzgets( fg, buffer3, 2048); std::string fd(buffer3); |
[ Voor 56% gewijzigd door codeneos op 06-12-2006 20:09 ]
http://www.tweakers.net/gallery/119170/sys