Dzięki, dołączyłem bibliotekę do projektu. Napisałem prosty program, w którym zapisuje dane do pliku, a potem chcę je odczytać. Niestety pojawiają się śmieci. Poniżej zamieszczam kod źródłowy oraz przykładowe wyjście:
#include <iostream>
#include <vector>
#include <string.h>
#include "/usr/local/include/zlib.h"
int main()
{
std::string str;
std::vector<const char*> records;
std::vector<uint> writenBytesList;
uint writenBytes;
uint numberOfRecords = 0;
records.reserve(3);
writenBytesList.reserve(3);
//clear old data
gzFile gzfp = gzopen("output.txt.gz","w");
gzclose(gzfp);
char choice;
std::cout << "Add record (q for quite): ";
while(std::cin >> choice && choice != 'q')
{
if(numberOfRecords < 3)
{
gzFile gzfp = gzopen("output.txt.gz","ab");
std::cout << "Enter text: ";
std::string str;
std::cin >> str;
str += "\n";
char buffer[str.size()+1];
strcpy(buffer, str.c_str());
writenBytes = gzwrite(gzfp, buffer, strlen(buffer));
std::cout << "Written bytes: " << writenBytes << std::endl;
gzclose(gzfp);
writenBytesList.push_back(writenBytes);
std::cout << "Added: " << str;
++numberOfRecords;
std::cout << "Add record (q for quite): ";
}
else
{
//read data from
gzFile gzfp = gzopen("output.txt.gz","rb");
for(auto it = writenBytesList.begin(); it != writenBytesList.end(); ++it)
{
char buffer[*it];
std::cout <<"Bytes to be read: " << *it << std::endl;
gzread(gzfp,buffer,*it);
std::cout << "In buffer: " << buffer << std::endl;
records.push_back(buffer);
}
for(auto it = records.begin(); it != records.end(); ++it)
{
std::cout << "Stored: " << *it << std::endl;
}
gzclose(gzfp);
}
}
return 0;
}
Add record (q for quite): a
Enter text: Item1
Written bytes: 6
Added: Item1
Add record (q for quite): Texttttt2
Enter text: Written bytes: 9
Added: exttttt2
Add record (q for quite): b
Enter text: SimpleText
Written bytes: 11
Added: SimpleText
Add record (q for quite): c
Bytes to be read: 6
In buffer: Item1
Bytes to be read: 9
In buffer: exttttt2
���cU
Bytes to be read: 11
In buffer: SimpleText
�cU
Stored:
Stored:
Stored: