OpenArchive.h 3.3 KB

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