本文整理汇总了C++中Archive::WOpen方法的典型用法代码示例。如果您正苦于以下问题:C++ Archive::WOpen方法的具体用法?C++ Archive::WOpen怎么用?C++ Archive::WOpen使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Archive
的用法示例。
在下文中一共展示了Archive::WOpen方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: urarlib_list
/*-------------------------------------------------------------------------*\
List the files in a RAR file
rarfile - Name of the RAR file to uncompress
list - Output. A list of file data of the files in the archive.
The list should be freed with urarlib_freelist().
libpassword - Password (for encrypted archives)
\*-------------------------------------------------------------------------*/
int urarlib_list(char *rarfile, ArchiveList_struct **ppList, char *libpassword, bool stopattwo)
{
if (!ppList)
return 0;
uint FileCount = 0;
InitCRC();
// Set the arguments for the extract command
auto_ptr<CommandData> pCmd( new CommandData );
{
strcpy(pCmd->Command, "L");
pCmd->AddArcName(rarfile, NULL);
pCmd->FileArgs->AddString(MASKALL);
pCmd->ParseArg((char*)"-va",NULL);
// Set password for encrypted archives
if (libpassword)
{
strncpy(pCmd->Password, libpassword, sizeof(pCmd->Password) - 1);
pCmd->Password[sizeof(pCmd->Password) - 1] = '\0';
}
// Opent the archive
auto_ptr<Archive> pArc( new Archive(pCmd.get()) );
if ( pArc.get() )
{
if (!pArc->WOpen(rarfile,NULL))
return 0;
FileCount=0;
*ppList = NULL;
ArchiveList_struct *pPrev = NULL;
int iArchive=0;
while (1)
{
if (pArc->IsOpened() && pArc->IsArchive(true))
{
int64_t iOffset = pArc->NextBlockPos;
while(pArc->ReadHeader()>0)
{
if (pArc->GetHeaderType() == FILE_HEAD)
{
if (pPrev)
if (strcasecmp(pArc->NewLhd.FileName,pPrev->item.Name)==0)
{
iOffset = pArc->NextBlockPos;
pArc->SeekToNext();
continue;
}
IntToExt(pArc->NewLhd.FileName,pArc->NewLhd.FileName);
ArchiveList_struct *pCurr = (ArchiveList_struct *)malloc(sizeof(ArchiveList_struct));
if (!pCurr)
break;
if (pPrev)
pPrev->next = pCurr;
if (!*ppList)
*ppList = pCurr;
pCurr->item.NameSize = strlen(pArc->NewLhd.FileName);
// sanity check - if it fails the archive is likely corrupt
if (pCurr->item.NameSize > NM)
{
File::RemoveCreated();
return 0;
}
pCurr->item.Name = (char *)malloc(pCurr->item.NameSize + 1);
strcpy(pCurr->item.Name, pArc->NewLhd.FileName);
pCurr->item.NameW = (wchar *)malloc((pCurr->item.NameSize + 1)*sizeof(wchar));
wcscpy(pCurr->item.NameW, pArc->NewLhd.FileNameW);
pCurr->item.PackSize = pArc->NewLhd.PackSize;
pCurr->item.UnpSize = int32to64(pArc->NewLhd.HighUnpSize,pArc->NewLhd.UnpSize);
pCurr->item.HostOS = pArc->NewLhd.HostOS;
pCurr->item.FileCRC = pArc->NewLhd.FileCRC;
pCurr->item.FileTime = pArc->NewLhd.FileTime;
pCurr->item.UnpVer = pArc->NewLhd.UnpVer;
pCurr->item.Method = pArc->NewLhd.Method;
pCurr->item.FileAttr = pArc->NewLhd.FileAttr;
pCurr->item.iOffset = iOffset;
pCurr->next = NULL;
pPrev = pCurr;
FileCount++;
if (stopattwo && FileCount > 1)
break;
}
iOffset = pArc->NextBlockPos;
if (iOffset > pArc->FileLength())
{
File::RemoveCreated();
return 0;
}
pArc->SeekToNext();
//.........这里部分代码省略.........