192 lines
3.7 KiB
C++
192 lines
3.7 KiB
C++
|
|
#include "../../include/kfile/SPatchData.h"
|
|
#include "../../include/kfile/SFileRoot.h"
|
|
|
|
#include <assert.h>
|
|
|
|
SFileRoot::SFileRoot(int nOpenMode)
|
|
: m_strFileName( "Unnamed.sxf" )
|
|
{
|
|
m_nExtType = 0;
|
|
m_nCompressMode = 0;
|
|
m_hFileHandle = NULL;
|
|
m_nOpenMode = nOpenMode;
|
|
Init();
|
|
}
|
|
|
|
SFileRoot::SFileRoot( const char * pFileName, int nOpenMode )
|
|
: m_strFileName( pFileName )
|
|
, m_strOnlyFileName( pFileName )
|
|
{
|
|
m_nExtType = 0;
|
|
m_nCompressMode = 0;
|
|
m_hFileHandle = NULL;
|
|
m_nOpenMode = nOpenMode;
|
|
|
|
std::string::size_type pos = m_strOnlyFileName.rfind( '\\' );
|
|
if( pos != std::string::npos )
|
|
{
|
|
m_strOnlyDir = m_strFileName.substr( 0, pos+1 ); //폴더
|
|
m_strOnlyFileName = ( pFileName + pos + 1 ); // by Testors
|
|
}
|
|
|
|
Init();
|
|
}
|
|
|
|
const char * SFileRoot::GetOnlyDirName()
|
|
{
|
|
return m_strOnlyDir.c_str();
|
|
}
|
|
|
|
const char * SFileRoot::GetOnlyFileName()
|
|
{
|
|
return m_strOnlyFileName.c_str();
|
|
}
|
|
|
|
|
|
SFileRoot::~SFileRoot()
|
|
{
|
|
if( m_hFileHandle ) CloseHandle( m_hFileHandle );
|
|
}
|
|
|
|
void SFileRoot::Init()
|
|
{
|
|
HANDLE hFileHandle = NULL;
|
|
if( m_nOpenMode == OPEN_SAVE )
|
|
hFileHandle = CreateFile( m_strFileName.c_str(), GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL );
|
|
else if( m_nOpenMode == OPEN_READ )
|
|
hFileHandle = CreateFile( m_strFileName.c_str(), GENERIC_READ , FILE_SHARE_READ , NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
|
|
|
|
if( hFileHandle == INVALID_HANDLE_VALUE )
|
|
{
|
|
return;
|
|
}
|
|
|
|
m_hFileHandle = hFileHandle;
|
|
|
|
//m_strFileExt = m_strFileName;
|
|
//std::string::size_type pos;
|
|
//std::string::size_type npos = -1;
|
|
//pos = m_strFileExt.rfind('.');
|
|
//if( pos != npos )
|
|
//{
|
|
// m_strFileExt.erase( 0, pos+1 );
|
|
// m_nExtType = SCOMPRESS_HEADER::TYPE_DAT; //기타
|
|
|
|
// if( _stricmp( m_strFileExt.c_str(), "nx3" ) == 0 )
|
|
// m_nExtType = SCOMPRESS_HEADER::TYPE_NX3;
|
|
// if( _stricmp( m_strFileExt.c_str(), "naf" ) == 0 )
|
|
// m_nExtType = SCOMPRESS_HEADER::TYPE_NAF;
|
|
// if( _stricmp( m_strFileExt.c_str(), "cob" ) == 0 )
|
|
// m_nExtType = SCOMPRESS_HEADER::TYPE_COB;
|
|
|
|
// if( _stricmp( m_strFileExt.c_str(), "dds" ) == 0 ||
|
|
// _stricmp( m_strFileExt.c_str(), "tga" ) == 0 ||
|
|
// _stricmp( m_strFileExt.c_str(), "jpg" ) == 0 ||
|
|
// _stricmp( m_strFileExt.c_str(), "bmp" ) == 0 )
|
|
// m_nExtType = SCOMPRESS_HEADER::TYPE_TEX;
|
|
//}
|
|
}
|
|
|
|
void SFileRoot::Close()
|
|
{
|
|
if( m_hFileHandle )
|
|
{
|
|
CloseHandle( m_hFileHandle );
|
|
m_hFileHandle = NULL;
|
|
}
|
|
}
|
|
|
|
int SFileRoot::GetFSize()
|
|
{
|
|
if( IsVaild() )
|
|
{
|
|
DWORD dwFileSizeLow, dwFileSizeHigh; //화일 크기
|
|
|
|
//화일 크기를 알아 낸다.
|
|
dwFileSizeLow = GetFileSize( m_hFileHandle, &dwFileSizeHigh );
|
|
if (dwFileSizeLow == INVALID_FILE_SIZE)
|
|
{
|
|
return -2;
|
|
}
|
|
|
|
if (dwFileSizeLow == INVALID_FILE_SIZE && GetLastError() != NO_ERROR )
|
|
{
|
|
return -3;
|
|
}
|
|
return dwFileSizeLow;
|
|
}
|
|
else
|
|
return -1;
|
|
}
|
|
|
|
int SFileRoot::Write( void * pData, DWORD dwDataSize )
|
|
{
|
|
if( !IsVaild() || m_nOpenMode != OPEN_SAVE ) return 0;
|
|
|
|
DWORD dwWriteSize = 0;
|
|
|
|
if( WriteFile( m_hFileHandle, pData, dwDataSize, &dwWriteSize, NULL ) == FALSE )
|
|
{
|
|
dwWriteSize = 0;
|
|
}
|
|
|
|
return dwWriteSize;
|
|
}
|
|
|
|
int SFileRoot::Read ( void * pData, DWORD dwDataSize )
|
|
{
|
|
if( !IsVaild() || m_nOpenMode != OPEN_READ ) return 0;
|
|
|
|
DWORD dwReadSize = 0;
|
|
|
|
if( ReadFile( m_hFileHandle, pData, dwDataSize, &dwReadSize, NULL ) == FALSE )
|
|
{
|
|
dwReadSize = 0;
|
|
}
|
|
|
|
return dwReadSize;
|
|
}
|
|
|
|
void SFileRoot::Save( int nMode )
|
|
{
|
|
switch(nMode)
|
|
{
|
|
case MODE_BIN : SaveBin(); break;
|
|
case MODE_TEXT: SaveText(); break;
|
|
default : break;
|
|
}
|
|
}
|
|
|
|
void SFileRoot::Load( int nMode )
|
|
{
|
|
switch(nMode)
|
|
{
|
|
case MODE_BIN : LoadBin(); break;
|
|
case MODE_TEXT: LoadText(); break;
|
|
default : break;
|
|
}
|
|
}
|
|
|
|
void SFileRoot::SaveBin()
|
|
{
|
|
|
|
}
|
|
|
|
void SFileRoot::SaveText()
|
|
{
|
|
|
|
}
|
|
|
|
void SFileRoot::LoadBin()
|
|
{
|
|
|
|
}
|
|
|
|
void SFileRoot::LoadText()
|
|
{
|
|
|
|
}
|
|
|
|
|