Ejemplo n.º 1
0
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);
}
Ejemplo n.º 2
0
/**
@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;
	}