1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
|
// OpenArchive.h
#ifndef __OPENARCHIVE_H
#define __OPENARCHIVE_H
#include "Common/MyString.h"
#include "Windows/FileFind.h"
#include "../../Archive/IArchive.h"
#include "LoadCodecs.h"
#include "ArchiveOpenCallback.h"
HRESULT GetArchiveItemPath(IInArchive *archive, UInt32 index, UString &result);
HRESULT GetArchiveItemPath(IInArchive *archive, UInt32 index, const UString &defaultName, UString &result);
HRESULT GetArchiveItemFileTime(IInArchive *archive, UInt32 index,
const FILETIME &defaultFileTime, FILETIME &fileTime);
HRESULT IsArchiveItemProp(IInArchive *archive, UInt32 index, PROPID propID, bool &result);
HRESULT IsArchiveItemFolder(IInArchive *archive, UInt32 index, bool &result);
HRESULT IsArchiveItemAnti(IInArchive *archive, UInt32 index, bool &result);
struct ISetSubArchiveName
{
virtual void SetSubArchiveName(const wchar_t *name) = 0;
};
HRESULT OpenArchive(
CCodecs *codecs,
IInStream *inStream,
const UString &fileName,
IInArchive **archiveResult,
int &formatIndex,
UString &defaultItemName,
IArchiveOpenCallback *openArchiveCallback);
HRESULT OpenArchive(
CCodecs *codecs,
const UString &filePath,
IInArchive **archive,
int &formatIndex,
UString &defaultItemName,
IArchiveOpenCallback *openArchiveCallback);
HRESULT OpenArchive(
CCodecs *codecs,
const UString &filePath,
IInArchive **archive0,
IInArchive **archive1,
int &formatIndex0,
int &formatIndex1,
UString &defaultItemName0,
UString &defaultItemName1,
IArchiveOpenCallback *openArchiveCallback);
HRESULT ReOpenArchive(IInArchive *archive, const UString &fileName, IArchiveOpenCallback *openArchiveCallback);
HRESULT MyOpenArchive(
CCodecs *codecs,
const UString &archiveName,
IInArchive **archive,
UString &defaultItemName,
IOpenCallbackUI *openCallbackUI);
HRESULT MyOpenArchive(
CCodecs *codecs,
const UString &archiveName,
IInArchive **archive0,
IInArchive **archive1,
UString &defaultItemName0,
UString &defaultItemName1,
UStringVector &volumePaths,
UInt64 &volumesSize,
IOpenCallbackUI *openCallbackUI);
struct CArchiveLink
{
CMyComPtr<IInArchive> Archive0;
CMyComPtr<IInArchive> Archive1;
UString DefaultItemName0;
UString DefaultItemName1;
int FormatIndex0;
int FormatIndex1;
UStringVector VolumePaths;
UInt64 VolumesSize;
int GetNumLevels() const
{
int result = 0;
if (Archive0)
{
result++;
if (Archive1)
result++;
}
return result;
}
bool IsOpen;
CArchiveLink(): IsOpen(false), VolumesSize(0) {};
IInArchive *GetArchive() { return Archive1 != 0 ? Archive1: Archive0; }
UString GetDefaultItemName() { return Archive1 != 0 ? DefaultItemName1: DefaultItemName0; }
int GetArchiverIndex() const { return Archive1 != 0 ? FormatIndex1: FormatIndex0; }
HRESULT Close();
void Release();
};
HRESULT OpenArchive(
CCodecs *codecs,
const UString &archiveName,
CArchiveLink &archiveLink,
IArchiveOpenCallback *openCallback);
HRESULT MyOpenArchive(
CCodecs *codecs,
const UString &archiveName,
CArchiveLink &archiveLink,
IOpenCallbackUI *openCallbackUI);
HRESULT ReOpenArchive(
CCodecs *codecs,
CArchiveLink &archiveLink,
const UString &fileName);
#endif
|