0

zipファイルの解凍リストにzlibを使用しています。これを行う簡単な方法は次のとおりです。しかし、SetCurrentDirectory関数呼び出しは他のスレッドに影響を与えます。zlibを使用して特定のディレクトリに解凍する方法はありますか。

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);
4

2 に答える 2

1

そこにあるのは、zlibライブラリを簡単に使用できるようにするラッパーです。質問にC++のタグを付け、c ++のラッパーを使用していると同時に、このラッパーを利用するグローバルヘルパーAPIを使用しています。

TUnzipラッパーを直接使用することをお勧めします(UnzipItemInternal例として実装方法を参照してください)。TUnzipクラスには、ベースディレクトリを設定できる優れたメソッドがありZRESULT TUnzip::SetUnzipBaseDir(const TCHAR *dir)ます。それを呼び出してディレクトリを設定します

于 2013-03-04T04:34:42.523 に答える
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);
}
于 2013-03-05T03:13:11.243 に答える