void YKZip::Extra(const YKString& srcFile, const YKString& desPath, const YK_CHAR* passWord /* = "" */) { #if YK_OS == YK_OS_WINDOWS_NT setlocale(LC_ALL, NULL); HANDLE hArcData; int RHCode,PFCode; char CmtBuf[16384]; struct RARHeaderDataEx HeaderData; struct RAROpenArchiveDataEx OpenArchiveData; memset(&HeaderData,0,sizeof(HeaderData)); memset(&OpenArchiveData,0,sizeof(OpenArchiveData)); YKBuffer<YK_WCHAR> buffSrc(srcFile.size()+1); std::wcscpy(buffSrc.Begin(), srcFile.c_str()); YKBuffer<YK_WCHAR> buffDes(desPath.size()+1); std::wcscpy(buffDes.Begin(), desPath.c_str()); OpenArchiveData.ArcNameW = buffSrc.Begin(); OpenArchiveData.CmtBuf=CmtBuf; OpenArchiveData.CmtBufSize=sizeof(CmtBuf); OpenArchiveData.OpenMode=RAR_OM_EXTRACT; OpenArchiveData.Callback=YK_NULL; OpenArchiveData.UserData=0; hArcData = RAROpenArchiveEx(&OpenArchiveData); if (OpenArchiveData.OpenResult!=0) return; RARSetPassword(hArcData, const_cast<YK_CHAR*>(passWord)); while ((RHCode=RARReadHeaderEx(hArcData,&HeaderData))==0) { PFCode = RARProcessFileW(hArcData,RAR_EXTRACT, buffDes.Begin(), NULL); } RARCloseArchive(hArcData); #endif // YKString strExtra = g_Application.GetCurModulePath(); // strExtra.Append(L"HaoZip\\HaoZipC.exe x ").Append(srcFile).Append(L" -ao -y -o").Append(desPath); // strExtra.Append(L" -p").Append(L"42F7AA9A-67E0-4CC7-9526-B2E8B358F179"); // system(strExtra.ToString().c_str()); // return; // HZIP hz = OpenZip(srcFile.c_str(), passWord); // ZIPENTRY ze; // GetZipItem(hz,-1,&ze); // int num = ze.index; // for (int i = 0; i < num; ++i) // { // GetZipItem(hz, i, &ze); // UnzipItem(hz,i, (desPath + ze.name).c_str()); // } // // CloseZip(hz); }
/** @SYMTestCaseID SYSLIB-STORE-CT-1183 @SYMTestCaseDesc Tests for CDictionaryFileStore::IsPresentL(),CDictionaryFileStore::Remove() functions @SYMTestPriority High @SYMTestActions Tests for writing an entry and commit it. Tests for reading the entry back. Tests for rewriting and reading back using LC functions. Tests for adding one more entry and check for the content. @SYMTestExpectedResults Test must not fail @SYMREQ REQ0000 */ LOCAL_C void Test1L(CDictionaryFileStore* aDict) { // write an entry and commit it test.Next(_L(" @SYMTestCaseID:SYSLIB-STORE-CT-1183 ")); RDictionaryWriteStream writeStream; TRAPD(ret, writeStream.AssignL(*aDict,testUid1)); test(ret==KErrNone); TRAP(ret, writeStream.WriteInt32L(value1)); test(ret==KErrNone); TRAP(ret, writeStream.CommitL()); test(ret==KErrNone); writeStream.Close(); // read that entry back RDictionaryReadStream readStream; TRAP(ret, readStream.OpenL(*aDict,testUid1)); test(ret==KErrNone); TInt val=0; TRAP(ret, val = readStream.ReadInt32L()); test(ret==KErrNone); test(val==value1); readStream.Close(); // test.Next(_L("Test the stream LC methods")); // read that entry back using the LC method readStream.OpenLC(*aDict,testUid1); TRAP(ret, val = readStream.ReadInt32L()); test(ret==KErrNone); test(val==value1); //readStream.Close(); CleanupStack::PopAndDestroy(); // readStream // // rewrite that entry using the LC method writeStream.AssignLC(*aDict,testUid1); //do some rading MStreamBuf* sbuf = writeStream.Sink(); HBufC8* buffer = HBufC8::NewLC(400); TUint8* buffptr = const_cast<TUint8*>(buffer->Ptr()); sbuf->ReadL(buffptr, 100); TPtr8 buffDes(buffer->Des()); TRequestStatus rstatus; sbuf->ReadL(buffDes, 100, rstatus); User::WaitForRequest(rstatus); CleanupStack::PopAndDestroy(); //buffer TRAP(ret, writeStream.WriteInt32L(value1)); test(ret==KErrNone); TRAP(ret, writeStream.CommitL()); test(ret==KErrNone); //writeStream.Close(); CleanupStack::PopAndDestroy(); // writestream // test.Next(_L("Test reverting the store")); // commit the store TRAP(ret, aDict->CommitL()); test(ret==KErrNone); // replace the 1st entry, commit it, then revert the store TRAP(ret, writeStream.AssignL(*aDict,testUid1)); test(ret==KErrNone); TRAP(ret, writeStream.WriteInt32L(value2)); test(ret==KErrNone); TRAP(ret, writeStream.CommitL()); test(ret==KErrNone); writeStream.Close(); TRAP(ret, aDict->RevertL()); test(ret==KErrNone); // check the value of the entry TRAP(ret, readStream.OpenL(*aDict,testUid1)); test(ret==KErrNone); TRAP(ret, val = readStream.ReadInt32L()); test(ret==KErrNone); test(val==value1); readStream.Close(); test.Next(_L("Test reverting the store using alternative Revert method")); // replace the 1st entry, commit it, then revert the store TRAP(ret, writeStream.AssignL(*aDict,testUid1)); test(ret==KErrNone); TRAP(ret, writeStream.WriteInt32L(value2)); test(ret==KErrNone); TRAP(ret, writeStream.CommitL()); test(ret==KErrNone); writeStream.Close(); aDict->Revert(); // check the value of the entry TRAP(ret, readStream.OpenL(*aDict,testUid1)); test(ret==KErrNone); TRAP(ret, val = readStream.ReadInt32L()); test(ret==KErrNone); test(val==value1); readStream.Close(); // // test.Next(_L("Test IsPresentL() and Remove()")); // add another entry TRAP(ret, writeStream.AssignL(*aDict,testUid2)); test(ret==KErrNone); TRAP(ret, writeStream.WriteInt32L(value2)); test(ret==KErrNone); test(!aDict->IsPresentL(testUid2)); TRAP(ret, writeStream.CommitL()); test(ret==KErrNone); writeStream.Close(); // test IsPresentL() test(aDict->IsPresentL(testUid1)); test(aDict->IsPresentL(testUid2)); test(!aDict->IsPresentL(testUid3)); // test Remove() TRAP(ret, aDict->RemoveL(testUid1)); test(!aDict->IsPresentL(testUid1)); // // test.Next(_L("Close the store and re-open it")); // commit the store and close it TRAP(ret, aDict->CommitL()); test(ret==KErrNone); // delete aDict; }