⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 archiveopencallback.cpp

📁 由7-zip提供的压缩、解压缩程序
💻 CPP
字号:
// ArchiveOpenCallback.cpp#include "StdAfx.h"#include "ArchiveOpenCallback.h"#include "Common/StringConvert.h"#include "Windows/PropVariant.h"#include "../../Common/FileStreams.h"using namespace NWindows;STDMETHODIMP COpenCallbackImp::SetTotal(const UInt64 *files, const UInt64 *bytes){  return Callback->SetTotal(files, bytes);}STDMETHODIMP COpenCallbackImp::SetCompleted(const UInt64 *files, const UInt64 *bytes){  return Callback->SetTotal(files, bytes);}  STDMETHODIMP COpenCallbackImp::GetProperty(PROPID propID, PROPVARIANT *value){  NCOM::CPropVariant propVariant;  if (_subArchiveMode)  {    switch(propID)    {      case kpidName:        propVariant = _subArchiveName;        break;    }    propVariant.Detach(value);    return S_OK;  }  switch(propID)  {    case kpidName:      propVariant = _fileInfo.Name;      break;    case kpidIsFolder:      propVariant = _fileInfo.IsDirectory();      break;    case kpidSize:      propVariant = _fileInfo.Size;      break;    case kpidAttributes:      propVariant = (UInt32)_fileInfo.Attributes;      break;    case kpidLastAccessTime:      propVariant = _fileInfo.LastAccessTime;      break;    case kpidCreationTime:      propVariant = _fileInfo.CreationTime;      break;    case kpidLastWriteTime:      propVariant = _fileInfo.LastWriteTime;      break;    }  propVariant.Detach(value);  return S_OK;}int COpenCallbackImp::FindName(const UString &name){  for (int i = 0; i < FileNames.Size(); i++)    if (name.CompareNoCase(FileNames[i]) == 0)      return i;  return -1;}struct CInFileStreamVol: public CInFileStream{  UString Name;  COpenCallbackImp *OpenCallbackImp;  CMyComPtr<IArchiveOpenCallback> OpenCallbackRef;  ~CInFileStreamVol()  {    int index = OpenCallbackImp->FindName(Name);    if (index >= 0)      OpenCallbackImp->FileNames.Delete(index);  }};STDMETHODIMP COpenCallbackImp::GetStream(const wchar_t *name,     IInStream **inStream){  if (_subArchiveMode)    return S_FALSE;  RINOK(Callback->CheckBreak());  *inStream = NULL;  UString fullPath = _folderPrefix + name;  if (!NFile::NFind::FindFile(fullPath, _fileInfo))    return S_FALSE;  if (_fileInfo.IsDirectory())    return S_FALSE;  CInFileStreamVol *inFile = new CInFileStreamVol;  CMyComPtr<IInStream> inStreamTemp = inFile;  if (!inFile->Open(fullPath))    return ::GetLastError();  *inStream = inStreamTemp.Detach();  inFile->Name = name;  inFile->OpenCallbackImp = this;  inFile->OpenCallbackRef = this;  FileNames.Add(name);  return S_OK;}#ifndef _NO_CRYPTOSTDMETHODIMP COpenCallbackImp::CryptoGetTextPassword(BSTR *password){  return Callback->CryptoGetTextPassword(password);}#endif  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -