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
|
// OpenArchive.h
#ifndef __OPEN_ARCHIVE_H
#define __OPEN_ARCHIVE_H
#include "Common/MyString.h"
#include "Windows/FileFind.h"
#include "../../Archive/IArchive.h"
#include "ArchiveOpenCallback.h"
#include "LoadCodecs.h"
HRESULT GetArchiveItemBoolProp(IInArchive *archive, UInt32 index, PROPID propID, bool &result);
HRESULT IsArchiveItemFolder(IInArchive *archive, UInt32 index, bool &result);
struct CArc
{
CMyComPtr<IInArchive> Archive;
UString Path;
UString DefaultName;
int FormatIndex;
int SubfileIndex;
FILETIME MTime;
bool MTimeDefined;
UString ErrorMessage;
CArc(): MTimeDefined(false) {}
HRESULT GetItemPath(UInt32 index, UString &result) const;
HRESULT GetItemMTime(UInt32 index, FILETIME &ft, bool &defined) const;
HRESULT IsItemAnti(UInt32 index, bool &result) const
{ return GetArchiveItemBoolProp(Archive, index, kpidIsAnti, result); }
HRESULT OpenStream(
CCodecs *codecs,
int formatIndex,
IInStream *stream,
ISequentialInStream *seqStream,
IArchiveOpenCallback *callback);
HRESULT OpenStreamOrFile(
CCodecs *codecs,
int formatIndex,
bool stdInMode,
IInStream *stream,
IArchiveOpenCallback *callback);
};
struct CArchiveLink
{
CObjectVector<CArc> Arcs;
UStringVector VolumePaths;
UInt64 VolumesSize;
bool IsOpen;
CArchiveLink(): VolumesSize(0), IsOpen(false) {}
HRESULT Close();
void Release();
~CArchiveLink() { Release(); }
IInArchive *GetArchive() const { return Arcs.Back().Archive; }
HRESULT Open(
CCodecs *codecs,
const CIntVector &formatIndices,
bool stdInMode,
IInStream *stream,
const UString &filePath,
IArchiveOpenCallback *callback);
HRESULT Open2(
CCodecs *codecs,
const CIntVector &formatIndices,
bool stdInMode,
IInStream *stream,
const UString &filePath,
IOpenCallbackUI *callbackUI);
HRESULT ReOpen(
CCodecs *codecs,
const UString &filePath,
IArchiveOpenCallback *callback);
};
#endif
|