diff --git a/NanaZip.Codecs/NanaZip.Codecs.Archive.DotNetSingleFile.cpp b/NanaZip.Codecs/NanaZip.Codecs.Archive.DotNetSingleFile.cpp index 31ef0594..f8e69f34 100644 --- a/NanaZip.Codecs/NanaZip.Codecs.Archive.DotNetSingleFile.cpp +++ b/NanaZip.Codecs/NanaZip.Codecs.Archive.DotNetSingleFile.cpp @@ -169,6 +169,7 @@ namespace NanaZip::Codecs::Archive private: IInStream* m_FileStream = nullptr; + std::uint64_t m_FullSize = 0; std::vector m_FilePaths; bool m_IsInitialized = false; @@ -455,6 +456,7 @@ namespace NanaZip::Codecs::Archive Current += RelativePathLength; Files.emplace(Entry.RelativePath, Entry); } + this->m_FullSize = BundleHeaderOffset + Current; } catch (...) { @@ -464,7 +466,7 @@ namespace NanaZip::Codecs::Archive HeaderBuffer.clear(); std::uint64_t TotalFiles = Files.size(); - std::uint64_t TotalBytes = BundleSize; + std::uint64_t TotalBytes = this->m_FullSize; if (OpenCallback) { @@ -496,6 +498,7 @@ namespace NanaZip::Codecs::Archive { this->m_IsInitialized = false; this->m_FilePaths.clear(); + this->m_FullSize = 0; if (this->m_FileStream) { this->m_FileStream->Release(); @@ -672,8 +675,6 @@ namespace NanaZip::Codecs::Archive _In_ PROPID PropId, _Inout_ LPPROPVARIANT Value) { - UNREFERENCED_PARAMETER(PropId); - if (!this->m_IsInitialized) { return S_FALSE; @@ -684,6 +685,18 @@ namespace NanaZip::Codecs::Archive return E_INVALIDARG; } + switch (PropId) + { + case SevenZipArchivePhysicalSize: + { + Value->uhVal.QuadPart = this->m_FullSize; + Value->vt = VT_UI8; + break; + } + default: + break; + } + return S_OK; }