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

📄 extractcallbackconsole.cpp

📁 由7-zip提供的压缩、解压缩程序
💻 CPP
字号:
// ExtractCallbackConsole.h#include "StdAfx.h"#include "ExtractCallbackConsole.h"#include "UserInputUtils.h"#include "ConsoleClose.h"#include "Common/Wildcard.h"#include "Windows/FileDir.h"#include "Windows/FileFind.h"#include "Windows/Time.h"#include "Windows/Defs.h"#include "Windows/PropVariant.h"#include "Windows/Error.h"#include "Windows/PropVariantConversions.h"#include "../../Common/FilePathAutoRename.h"#include "../Common/ExtractingFilePath.h"using namespace NWindows;using namespace NFile;using namespace NDirectory;static const char *kTestingString    =  "Testing     ";static const char *kExtractingString =  "Extracting  ";static const char *kSkippingString   =  "Skipping    ";static const char *kCantAutoRename = "can not create file with auto name\n";static const char *kCantRenameFile = "can not rename existing file\n";static const char *kCantDeleteOutputFile = "can not delete output file ";static const char *kError = "ERROR: ";static const char *kMemoryExceptionMessage = "Can't allocate required memory!";static const char *kProcessing = "Processing archive: ";static const char *kEverythingIsOk = "Everything is Ok";static const char *kNoFiles = "No files to process";static const char *kUnsupportedMethod = "Unsupported Method";static const char *kCRCFailed = "CRC Failed";static const char *kDataError = "Data Error";static const char *kUnknownError = "Unknown Error";STDMETHODIMP CExtractCallbackConsole::SetTotal(UInt64 size){  if (NConsoleClose::TestBreakSignal())    return E_ABORT;  return S_OK;}STDMETHODIMP CExtractCallbackConsole::SetCompleted(const UInt64 *completeValue){  if (NConsoleClose::TestBreakSignal())    return E_ABORT;  return S_OK;}STDMETHODIMP CExtractCallbackConsole::AskOverwrite(    const wchar_t *existName, const FILETIME *existTime, const UInt64 *existSize,    const wchar_t *newName, const FILETIME *newTime, const UInt64 *newSize,    Int32 *answer){  (*OutStream) << "file " << existName <<     "\nalready exists. Overwrite with " << endl;  (*OutStream) << newName;    NUserAnswerMode::EEnum overwriteAnswer = ScanUserYesNoAllQuit(OutStream);    switch(overwriteAnswer)  {    case NUserAnswerMode::kQuit:      return E_ABORT;    case NUserAnswerMode::kNo:      *answer = NOverwriteAnswer::kNo;      break;    case NUserAnswerMode::kNoAll:      *answer = NOverwriteAnswer::kNoToAll;      break;    case NUserAnswerMode::kYesAll:      *answer = NOverwriteAnswer::kYesToAll;      break;    case NUserAnswerMode::kYes:      *answer = NOverwriteAnswer::kYes;      break;    case NUserAnswerMode::kAutoRename:      *answer = NOverwriteAnswer::kAutoRename;      break;    default:      return E_FAIL;  }  return S_OK;}STDMETHODIMP CExtractCallbackConsole::PrepareOperation(const wchar_t *name, Int32 askExtractMode, const UInt64 *position){  switch (askExtractMode)  {    case NArchive::NExtract::NAskMode::kExtract:      (*OutStream) << kExtractingString;      break;    case NArchive::NExtract::NAskMode::kTest:      (*OutStream) << kTestingString;      break;    case NArchive::NExtract::NAskMode::kSkip:      (*OutStream) << kSkippingString;      break;  };  (*OutStream) << name;  if (position != 0)    (*OutStream) << " <" << *position << ">";  return S_OK;}STDMETHODIMP CExtractCallbackConsole::MessageError(const wchar_t *message){  (*OutStream) << message << endl;  return S_OK;}STDMETHODIMP CExtractCallbackConsole::SetOperationResult(Int32 operationResult){  switch(operationResult)  {    case NArchive::NExtract::NOperationResult::kOK:      break;    default:    {      NumFileErrorsInCurrentArchive++;      NumFileErrors++;      (*OutStream) << "     ";      switch(operationResult)      {        case NArchive::NExtract::NOperationResult::kUnSupportedMethod:          (*OutStream) << kUnsupportedMethod;          break;        case NArchive::NExtract::NOperationResult::kCRCError:          (*OutStream) << kCRCFailed;          break;        case NArchive::NExtract::NOperationResult::kDataError:          (*OutStream) << kDataError;          break;        default:          (*OutStream) << kUnknownError;      }    }  }  (*OutStream) << endl;  return S_OK;}STDMETHODIMP CExtractCallbackConsole::CryptoGetTextPassword(BSTR *password){  if (!PasswordIsDefined)  {    Password = GetPassword(OutStream);     PasswordIsDefined = true;  }  CMyComBSTR tempName(Password);  *password = tempName.Detach();  return S_OK;}HRESULT CExtractCallbackConsole::BeforeOpen(const wchar_t *name){  NumArchives++;  NumFileErrorsInCurrentArchive = 0;  (*OutStream) << endl << kProcessing << name << endl;  return S_OK;}HRESULT CExtractCallbackConsole::OpenResult(const wchar_t *name, HRESULT result){  (*OutStream) << endl;  if (result != S_OK)  {    (*OutStream) << "Error: " << name << " is not supported archive" << endl;    NumArchiveErrors++;  }  return S_OK;}  HRESULT CExtractCallbackConsole::ThereAreNoFiles(){  (*OutStream) << endl << kNoFiles << endl;  return S_OK;}HRESULT CExtractCallbackConsole::ExtractResult(HRESULT result){  if (result == S_OK)  {    (*OutStream) << endl;    if (NumFileErrorsInCurrentArchive == 0)      (*OutStream) << kEverythingIsOk << endl;    else     {      NumArchiveErrors++;      (*OutStream) << "Sub items Errors: " << NumFileErrorsInCurrentArchive << endl;    }  }  if (result == S_OK)    return result;  NumArchiveErrors++;  if (result == E_ABORT || result == ERROR_DISK_FULL)    return result;  (*OutStream) << endl << kError;  if (result == E_OUTOFMEMORY)    (*OutStream) << kMemoryExceptionMessage;  else  {    UString message;    NError::MyFormatMessage(result, message);    (*OutStream) << message;  }  (*OutStream) << endl;  return S_OK;}HRESULT CExtractCallbackConsole::SetPassword(const UString &password){  PasswordIsDefined = true;  Password = password;  return S_OK;}

⌨️ 快捷键说明

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