0

Okay so i am trying to make it so i can unzip files using c++ and found a library called zlib i built all .sln file in the folder contrib/vstudio they all compiled succesfully but when i try to get this example to work

/*
   unzips testfile.txt from C:\temp\test.zip
   and puts it in a string
*/
#define ZLIB_WINAPI // dont know if i need this or not
#include <cstdio>
#include <string>
#include <iostream>
#include "unzip.h" // MiniZip library

#define WRITEBUFFERSIZE (5242880) // 5Mb buffer

using namespace std;

string readZipFile(string zipFile, string fileInZip) {
    int err = UNZ_OK;                 // error status
    uInt size_buf = WRITEBUFFERSIZE;  // byte size of buffer to store raw csv data
    void* buf;                        // the buffer  
    string sout;                      // output strings
    char filename_inzip[256];         // for unzGetCurrentFileInfo
    unz_file_info file_info;          // for unzGetCurrentFileInfo   

    unzFile uf = unzOpen(zipFile.c_str()); // open zipfile stream
    if (uf==NULL) {
        cerr << "Cannot open " << zipFile << endl;
        return sout;
    } // file is open

    if ( unzLocateFile(uf,fileInZip.c_str(),1) ) { // try to locate file inside zip
        // second argument of unzLocateFile: 1 = case sensitive, 0 = case-insensitive
        cerr << "File " << fileInZip << " not found in " << zipFile << endl;
        return sout;
    } // file inside zip found

    if (unzGetCurrentFileInfo(uf,&file_info,filename_inzip,sizeof(filename_inzip),NULL,0,NULL,0)) {
        cerr << "Error " << err << " with zipfile " << zipFile << " in unzGetCurrentFileInfo." << endl;
        return sout;
    } // obtained the necessary details about file inside zip

    buf = (void*)malloc(size_buf); // setup buffer
    if (buf==NULL) {
        cerr << "Error allocating memory for read buffer" << endl;
        return sout;
    } // buffer ready

    err = unzOpenCurrentFilePassword(uf,NULL); // Open the file inside the zip (password = NULL)
    if (err!=UNZ_OK) {
        cerr << "Error " << err << " with zipfile " << zipFile << " in unzOpenCurrentFilePassword." << endl;
        return sout;
    } // file inside the zip is open

    // Copy contents of the file inside the zip to the buffer
    cout << "Extracting: " << filename_inzip << " from " << zipFile << endl;
    do {
        err = unzReadCurrentFile(uf,buf,size_buf);
        if (err<0) {
            cerr << "Error " << err << " with zipfile " << zipFile << " in unzReadCurrentFile" << endl;
            sout = ""; // empty output string
            break;
        }
        // copy the buffer to a string
        if (err>0) for (int i = 0; i < (int) err; i++) sout.push_back( *(((char*)buf)+i) );
    } while (err>0);

    err = unzCloseCurrentFile (uf);  // close the zipfile
    if (err!=UNZ_OK) {
            cerr << "Error " << err << " with zipfile " << zipFile << " in unzCloseCurrentFile" << endl;
            sout = ""; // empty output string
        }

    free(buf); // free up buffer memory
    return sout;
}

int main(int argc, char *argv[]) {
    string string_buffer = readZipFile("C:/temp/test.zip", "testfile.txt");
    cout << string_buffer << endl;
    return 0;
}

i get these linker errors

1>main.obj : error LNK2019: unresolved external symbol _unzCloseCurrentFile@4 referenced in function "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl readZipFile(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?readZipFile@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V12@0@Z)
1>main.obj : error LNK2019: unresolved external symbol _unzReadCurrentFile@12 referenced in function "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl readZipFile(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?readZipFile@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V12@0@Z)
1>main.obj : error LNK2019: unresolved external symbol _unzOpenCurrentFilePassword@8 referenced in function "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl readZipFile(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?readZipFile@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V12@0@Z)
1>main.obj : error LNK2019: unresolved external symbol _unzGetCurrentFileInfo@32 referenced in function "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl readZipFile(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?readZipFile@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V12@0@Z)
1>main.obj : error LNK2019: unresolved external symbol _unzLocateFile@12 referenced in function "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl readZipFile(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?readZipFile@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V12@0@Z)
1>main.obj : error LNK2019: unresolved external symbol _unzOpen@4 referenced in function "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl readZipFile(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?readZipFile@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V12@0@Z)

I have no idea what they mean.

I have looked in the file named unzip.h for the commands i can use but i dont know how to use them if i dont have a good example of them working and sadly the example that comes with it named miniunz.c is messy and hard to read at least for me. If any of you know a good example i guess that would work too.

if you need more info please ask

3
Contributors
2
Replies
11
Views
3 Years
Discussion Span
Last Post by rubberman
0

Show your linker directives. It is obvious that you aren't linking in the required libraries for zlib or whatever.

This article has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.