2013-03-04 81 views
0

我使用zlib解压缩zip文件列表。这是实现它的简单方法。但是SetCurrentDirectory函数调用会影响我的其他线程。有什么办法使用zlib解压到特定的目录。使用zlib解压缩而不使用SetCurrentDirectory

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); 
+0

它看起来不像zlib。您的示例中的函数不存在于手册中(http://www.zlib.net/manual.html)。我用zlib很多,从来没有SetCurrentDirectory() – cha 2013-03-04 04:01:49

+0

@cha:这是确切的源文件。 http://www.openscenegraph.org/svn/osg/OpenSceneGraph/tags/OpenSceneGraph-2.9.7/src/osgPlugins/zip/unzip.cpp – 2013-03-04 04:08:54

回答

1

找到解决方案。

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); 
} 
1

你在那里有一个包装允许方便地使用zlib库。您已将问题标记为C++,您正在使用C++的包装器,同时您正在使用使用此包装器的全局辅助器API。

我建议您直接使用TUnzip包装(请参阅UnzipItemInternal作为示例实施)。 TUnzip类有一个很好的方法,可以设置基本目录ZRESULT TUnzip::SetUnzipBaseDir(const TCHAR *dir)。呼叫它设置目录

+0

其实我并不知道这不是zlib。但我无法更改库,因为我正在对现有项目进行一些更改。无论如何,它帮助你的意见找到答案。谢谢。 – 2013-03-05 03:14:37