Files
FC1/Editor/Util/PakFile.cpp
romkazvo 34d6c5d489 123
2023-08-07 19:29:24 +08:00

116 lines
3.3 KiB
C++

////////////////////////////////////////////////////////////////////////////
//
// Crytek Engine Source File.
// Copyright (C), Crytek Studios, 2002.
// -------------------------------------------------------------------------
// File name: pakfile.cpp
// Version: v1.00
// Created: 30/6/2003 by Timur.
// Compilers: Visual Studio.NET
// Description:
// -------------------------------------------------------------------------
// History:
//
////////////////////////////////////////////////////////////////////////////
#include "StdAfx.h"
#include "PakFile.h"
#include <ICryPak.h>
//////////////////////////////////////////////////////////////////////////
CPakFile::CPakFile()
{
m_pArchive = NULL;
}
//////////////////////////////////////////////////////////////////////////
CPakFile::~CPakFile()
{
Close();
}
//////////////////////////////////////////////////////////////////////////
CPakFile::CPakFile( const char *filename )
{
m_pArchive = NULL;
Open( filename );
}
//////////////////////////////////////////////////////////////////////////
void CPakFile::Close()
{
m_pArchive = NULL;
}
//////////////////////////////////////////////////////////////////////////
bool CPakFile::Open( const char *filename,bool bAbsolutePath )
{
if (m_pArchive)
Close();
if (bAbsolutePath)
m_pArchive = GetIEditor()->GetSystem()->GetIPak()->OpenArchive( filename,ICryArchive::FLAGS_ABSOLUTE_PATHS );
else
m_pArchive = GetIEditor()->GetSystem()->GetIPak()->OpenArchive( filename );
if (m_pArchive)
return true;
return false;
}
//////////////////////////////////////////////////////////////////////////
bool CPakFile::OpenForRead( const char *filename )
{
if (m_pArchive)
Close();
//m_pArchive = GetIEditor()->GetSystem()->GetIPak()->OpenArchive( filename,ICryArchive::FLAGS_OPTIMIZED_READ_ONLY|ICryArchive::FLAGS_RELATIVE_PATHS_ONLY|ICryArchive::FLAGS_IGNORE_MODS );
m_pArchive = GetIEditor()->GetSystem()->GetIPak()->OpenArchive( filename,ICryArchive::FLAGS_OPTIMIZED_READ_ONLY|ICryArchive::FLAGS_ABSOLUTE_PATHS|ICryArchive::FLAGS_IGNORE_MODS );
if (m_pArchive)
return true;
return false;
}
//////////////////////////////////////////////////////////////////////////
bool CPakFile::UpdateFile( const char *filename,CMemFile &file,bool bCompress )
{
if (m_pArchive)
{
int nSize = file.GetLength();
UpdateFile( filename,file.Detach(),nSize,bCompress );
return true;
}
return false;
}
//////////////////////////////////////////////////////////////////////////
bool CPakFile::UpdateFile( const char *filename,CMemoryBlock &mem,bool bCompress )
{
if (m_pArchive)
{
UpdateFile( filename,mem.GetBuffer(),mem.GetSize(),bCompress );
return true;
}
return false;
}
/////////////////////////////////////////////////////////////////////////
bool CPakFile::UpdateFile( const char *filename,void *pBuffer,int nSize,bool bCompress )
{
if (m_pArchive)
{
if (bCompress)
m_pArchive->UpdateFile( filename,pBuffer,nSize, ICryArchive::METHOD_DEFLATE, ICryArchive::LEVEL_BETTER);
else
m_pArchive->UpdateFile( filename,pBuffer,nSize );
return true;
}
return false;
}
//////////////////////////////////////////////////////////////////////////
bool CPakFile::RemoveFile( const char *filename )
{
if (m_pArchive)
{
return m_pArchive->RemoveFile( filename );
}
return false;
}