7zhandler.h
来自「由7-zip提供的压缩、解压缩程序」· C头文件 代码 · 共 235 行
H
235 行
// 7z/Handler.h#ifndef __7Z_HANDLER_H#define __7Z_HANDLER_H#include "../IArchive.h"#include "7zIn.h"#include "7zCompressionMode.h"#ifndef _SFX#include "7zMethods.h"#endif#ifdef COMPRESS_MT#include "../../../Windows/System.h"#endifnamespace NArchive {namespace N7z {#ifdef _7Z_VOLstruct CRef{ int VolumeIndex; int ItemIndex;};/*struct CRef2{ CRecordVector<CRef> Refs; UInt64 UnPackSize; UInt64 PackSize; UInt64 StartPos; CRef2(): UnPackSize(0), PackSize(0), StartPos(0) {}};*/struct CVolume{ int StartRef2Index; CMyComPtr<IInStream> Stream; CArchiveDatabaseEx Database;};#endif#ifndef EXTRACT_ONLYstruct COneMethodInfo{ CObjectVector<CProperty> CoderProperties; UString MethodName;};#endif// {23170F69-40C1-278A-1000-000110070000}DEFINE_GUID(CLSID_CFormat7z, 0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0x07, 0x00, 0x00);#ifndef __7Z_SET_PROPERTIES#ifdef EXTRACT_ONLY#ifdef COMPRESS_MT#define __7Z_SET_PROPERTIES#endif#else #define __7Z_SET_PROPERTIES#endif#endifclass CHandler: public IInArchive, #ifdef _7Z_VOL public IInArchiveGetStream, #endif #ifdef __7Z_SET_PROPERTIES public ISetProperties, #endif #ifndef EXTRACT_ONLY public IOutArchive, #endif public CMyUnknownImp{public: MY_QUERYINTERFACE_BEGIN #ifdef _7Z_VOL MY_QUERYINTERFACE_ENTRY(IInArchiveGetStream) #endif #ifdef __7Z_SET_PROPERTIES MY_QUERYINTERFACE_ENTRY(ISetProperties) #endif #ifndef EXTRACT_ONLY MY_QUERYINTERFACE_ENTRY(IOutArchive) #endif MY_QUERYINTERFACE_END MY_ADDREF_RELEASE STDMETHOD(Open)(IInStream *stream, const UInt64 *maxCheckStartPosition, IArchiveOpenCallback *openArchiveCallback); STDMETHOD(Close)(); STDMETHOD(GetNumberOfItems)(UInt32 *numItems); STDMETHOD(GetProperty)(UInt32 index, PROPID propID, PROPVARIANT *value); STDMETHOD(Extract)(const UInt32* indices, UInt32 numItems, Int32 testMode, IArchiveExtractCallback *extractCallback); STDMETHOD(GetArchiveProperty)(PROPID propID, PROPVARIANT *value); STDMETHOD(GetNumberOfProperties)(UInt32 *numProperties); STDMETHOD(GetPropertyInfo)(UInt32 index, BSTR *name, PROPID *propID, VARTYPE *varType); STDMETHOD(GetNumberOfArchiveProperties)(UInt32 *numProperties); STDMETHOD(GetArchivePropertyInfo)(UInt32 index, BSTR *name, PROPID *propID, VARTYPE *varType); #ifdef _7Z_VOL STDMETHOD(GetStream)(UInt32 index, ISequentialInStream **stream); #endif #ifdef __7Z_SET_PROPERTIES STDMETHOD(SetProperties)(const wchar_t **names, const PROPVARIANT *values, Int32 numProperties); #endif #ifndef EXTRACT_ONLY // IOutArchiveHandler STDMETHOD(UpdateItems)(ISequentialOutStream *outStream, UInt32 numItems, IArchiveUpdateCallback *updateCallback); STDMETHOD(GetFileTimeType)(UInt32 *type); // ISetProperties HRESULT SetSolidSettings(const UString &s); HRESULT SetSolidSettings(const PROPVARIANT &value); #endif CHandler();private: #ifdef _7Z_VOL CObjectVector<CVolume> _volumes; CObjectVector<CRef> _refs; #else CMyComPtr<IInStream> _inStream; NArchive::N7z::CArchiveDatabaseEx _database; #endif #ifdef COMPRESS_MT UInt32 _numThreads; #endif #ifndef EXTRACT_ONLY CObjectVector<COneMethodInfo> _methods; CRecordVector<CBind> _binds; bool _removeSfxBlock; UInt64 _numSolidFiles; UInt64 _numSolidBytes; bool _numSolidBytesDefined; bool _solidExtension; bool _compressHeaders; bool _compressHeadersFull; bool _encryptHeaders; bool _autoFilter; UInt32 _level; bool _volumeMode; HRESULT SetParam(COneMethodInfo &oneMethodInfo, const UString &name, const UString &value); HRESULT SetParams(COneMethodInfo &oneMethodInfo, const UString &srcString); HRESULT SetPassword(CCompressionMethodMode &methodMode, IArchiveUpdateCallback *updateCallback); HRESULT SetCompressionMethod(CCompressionMethodMode &method, CObjectVector<COneMethodInfo> &methodsInfo #ifdef COMPRESS_MT , UInt32 numThreads #endif ); HRESULT SetCompressionMethod( CCompressionMethodMode &method, CCompressionMethodMode &headerMethod); #endif #ifndef _SFX CRecordVector<UInt64> _fileInfoPopIDs; void FillPopIDs(); #endif #ifndef EXTRACT_ONLY void InitSolidFiles() { _numSolidFiles = UInt64(Int64(-1)); } void InitSolidSize() { _numSolidBytes = UInt64(Int64(-1)); } void InitSolid() { InitSolidFiles(); InitSolidSize(); _solidExtension = false; _numSolidBytesDefined = false; } void Init() { _removeSfxBlock = false; _compressHeaders = true; _compressHeadersFull = true; _encryptHeaders = false; #ifdef COMPRESS_MT _numThreads = NWindows::NSystem::GetNumberOfProcessors(); #endif _level = 5; _autoFilter = true; _volumeMode = false; InitSolid(); } #endif};}}#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?