关于C#:不使用SetCurrentDirectory即可使用zlib解压缩

Unzip with zlib without using SetCurrentDirectory

我正在使用zlib解压缩zip文件列表。这是执行此操作的简单方法。但是SetCurrentDirectory函数调用会影响我的其他线程。有什么方法可以使用zlib解压缩到特定目录。

1
2
3
4
5
6
7
8
SetCurrentDirectory("c:\\\\docs\\\\stuff");
HZIP hz = OpenZip("c:\\\\stuff.zip",0);
ZIPENTRY ze; GetZipItem(hz,-1,&ze); int numitems=ze.index;
for (int i=0; i<numitems; i++)
{ GetZipItem(hz,i,&ze);
   UnzipItem(hz,i,ze.name);
 }
 CloseZip(hz);


找到了解决方案。

1
2
3
4
5
6
7
8
9
10
11
12
13
void unZipPackage(std::wstring zip_file,std::wstring dest_dir){

    HZIP hz = OpenZip(zip_file.c_str(),0);  
    ZIPENTRY ze; GetZipItem(hz,-1,&ze); int numitems=ze.index;
    for (int i=0; i<numitems; i++)
    {
        GetZipItem(hz,i,&ze);              
        wchar_t dest[MAX_PATH];
        swprintf(dest,MAX_PATH,L"%s\\\\%s",dest_dir.c_str(),ze.name);    
        UnzipItem(hz,i,dest);      
    }  
    CloseZip(hz);
}

您拥有的包装器可以轻松使用zlib库。您已将问题标记为C,正在使用c的包装器,同时使用了利用该包装器的全局帮助器API。

我建议您直接使用TUnzip包装器(请参见如何实现UnzipItemInternal作为示例)。 TUnzip类有一个不错的方法,允许设置基本目录ZRESULT TUnzip::SetUnzipBaseDir(const TCHAR *dir)。调用它来设置目录