2019-10-31 13:02:44 -04:00
|
|
|
#include <cassert>
|
2011-02-26 22:48:25 +00:00
|
|
|
#include "PsfZipArchive.h"
|
2011-09-29 02:39:09 +00:00
|
|
|
#include "StdStreamUtils.h"
|
2014-04-06 02:50:50 +00:00
|
|
|
#include "make_unique.h"
|
2011-02-26 22:48:25 +00:00
|
|
|
|
2019-10-31 13:02:44 -04:00
|
|
|
void CPsfZipArchive::Open(const fs::path& filePath)
|
2011-02-26 22:48:25 +00:00
|
|
|
{
|
2014-04-06 02:50:50 +00:00
|
|
|
assert(m_inputFile.IsEmpty());
|
|
|
|
assert(!m_archive);
|
|
|
|
m_inputFile = Framework::CreateInputStdStream(filePath.native());
|
|
|
|
m_archive = std::make_unique<Framework::CZipArchiveReader>(m_inputFile);
|
|
|
|
for(const auto& fileHeaderPair : m_archive->GetFileHeaders())
|
2011-02-26 22:48:25 +00:00
|
|
|
{
|
2014-04-06 02:50:50 +00:00
|
|
|
const auto& fileHeader(fileHeaderPair.second);
|
2011-02-26 22:48:25 +00:00
|
|
|
if(fileHeader.uncompressedSize == 0) continue;
|
|
|
|
FILEINFO fileInfo;
|
2014-04-06 02:50:50 +00:00
|
|
|
fileInfo.name = fileHeaderPair.first;
|
2011-02-26 22:48:25 +00:00
|
|
|
fileInfo.length = fileHeader.uncompressedSize;
|
|
|
|
m_files.push_back(fileInfo);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void CPsfZipArchive::ReadFileContents(const char* fileName, void* buffer, unsigned int bufferLength)
|
|
|
|
{
|
2012-09-07 00:23:45 +00:00
|
|
|
assert(m_archive);
|
|
|
|
if(!m_archive)
|
2011-02-26 22:48:25 +00:00
|
|
|
{
|
|
|
|
throw std::runtime_error("Archive not opened!");
|
|
|
|
}
|
|
|
|
|
|
|
|
Framework::CZipArchiveReader::StreamPtr stream = m_archive->BeginReadFile(fileName);
|
|
|
|
stream->Read(buffer, bufferLength);
|
|
|
|
}
|