604 lines
14 KiB
C++
604 lines
14 KiB
C++
|
|
#include "stdafx.h"
|
|||
|
|
#include "FileIOThread.h"
|
|||
|
|
#include "WorkDialog.h"
|
|||
|
|
#include "SundriesFunc.h"
|
|||
|
|
#include <utility>
|
|||
|
|
|
|||
|
|
//------------------------------------------------------------------------
|
|||
|
|
AddFileList g_AddFileList;
|
|||
|
|
ExportInfoList g_ExportList;
|
|||
|
|
CEtPackingFile g_FileSystem;
|
|||
|
|
|
|||
|
|
CFileImportThread* g_pAddThread=NULL;
|
|||
|
|
COptimizeThread* g_pOptimizeThread=NULL;
|
|||
|
|
CFileExportThread* g_pExportThread=NULL;
|
|||
|
|
CDivPackingThread* g_pDivPackingThread = NULL;
|
|||
|
|
CDivPackingCapacityThread* g_pDivPackingCapaThread = NULL;
|
|||
|
|
PatchThread* g_pPatchThread = NULL;
|
|||
|
|
|
|||
|
|
//------------------------------------------------------------------------
|
|||
|
|
CFileImportThread::CFileImportThread(HWND hWnd)
|
|||
|
|
: m_hWnd( hWnd )
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
CFileImportThread::~CFileImportThread()
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void
|
|||
|
|
CFileImportThread::Run()
|
|||
|
|
{
|
|||
|
|
if (m_hWnd == NULL)
|
|||
|
|
return;
|
|||
|
|
|
|||
|
|
AddFileList_It FileListIt = g_AddFileList.begin();
|
|||
|
|
|
|||
|
|
int nMaxSize = (int)g_AddFileList.size();
|
|||
|
|
int nCnt = 0;
|
|||
|
|
for (FileListIt ; FileListIt != g_AddFileList.end() ; ++FileListIt )
|
|||
|
|
{
|
|||
|
|
g_FileSystem.ChangeDir((*FileListIt).FilePath.c_str());
|
|||
|
|
g_FileSystem.AddFile((*FileListIt).FileName.c_str() );
|
|||
|
|
nCnt++;
|
|||
|
|
|
|||
|
|
g_pWorking->PostMessage(WM_NFS_PROGRESS, nCnt, nMaxSize);
|
|||
|
|
}
|
|||
|
|
g_FileSystem.GeneratePackingMap();
|
|||
|
|
|
|||
|
|
g_AddFileList.clear();
|
|||
|
|
PostMessage(m_hWnd,WM_COMPLETE_MSG,0,0);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
//------------------------------------------------------------------------
|
|||
|
|
|
|||
|
|
COptimizeThread::COptimizeThread(HWND hWnd, CString strPath)
|
|||
|
|
: m_hWnd( hWnd ) , m_strPath( strPath )
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
COptimizeThread::~COptimizeThread()
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void
|
|||
|
|
COptimizeThread::Run()
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
CString strPath = m_strPath;
|
|||
|
|
strPath = strPath.Left(strPath.ReverseFind(_T('\\')));
|
|||
|
|
strPath = strPath + _T("\\Optimized.pak");
|
|||
|
|
|
|||
|
|
g_FileSystem.OptimizeFileSystem(strPath);
|
|||
|
|
g_FileSystem.CloseFileSystem();
|
|||
|
|
|
|||
|
|
|
|||
|
|
DWORD nError = 0;
|
|||
|
|
if ( DeleteFile(m_strPath.GetBuffer()) == FALSE )
|
|||
|
|
{
|
|||
|
|
nError = GetLastError();
|
|||
|
|
}
|
|||
|
|
if ( MoveFile(strPath, m_strPath) == FALSE )
|
|||
|
|
{
|
|||
|
|
nError = GetLastError();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//_trename(strPath.GetBuffer(), m_strPath.GetBuffer());
|
|||
|
|
g_FileSystem.OpenFileSystem(m_strPath);
|
|||
|
|
|
|||
|
|
|
|||
|
|
PostMessage(m_hWnd,WM_COMPLETE_OPTIMIZE,0,0);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//------------------------------------------------------------------------
|
|||
|
|
|
|||
|
|
CFileExportThread::CFileExportThread(HWND hWnd, CString strPath)
|
|||
|
|
: m_hWnd( hWnd ) , m_ExportPath( strPath )
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
CFileExportThread::~CFileExportThread()
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void
|
|||
|
|
CFileExportThread::Run()
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
ExportInfoList_It Export_It = g_ExportList.begin();
|
|||
|
|
|
|||
|
|
int nCnt = 0 ;
|
|||
|
|
for (Export_It ; Export_It != g_ExportList.end() ; ++Export_It )
|
|||
|
|
{
|
|||
|
|
g_pWorking->PostMessage(WM_NFS_PROGRESS, nCnt, g_ExportList.size());
|
|||
|
|
nCnt++;
|
|||
|
|
SetCurrentDirectory(m_ExportPath); // Export <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̵<EFBFBD>
|
|||
|
|
|
|||
|
|
ExportInfo tempFileInfo = (ExportInfo)(*Export_It);
|
|||
|
|
|
|||
|
|
CString newPath = m_ExportPath + tempFileInfo.FilePath.c_str();
|
|||
|
|
CreateFolder( (LPTSTR)(LPCTSTR)newPath );
|
|||
|
|
SetCurrentDirectory((LPTSTR)(LPCTSTR)newPath); // Export <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̵<EFBFBD>
|
|||
|
|
|
|||
|
|
CString iPacPath = tempFileInfo.Name.c_str(); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
// iPacPath += tempFileInfo.Name.c_str(); // <20><><EFBFBD><EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD>¡~
|
|||
|
|
|
|||
|
|
CEtFileHandle* FH = g_FileSystem.OpenFile((LPTSTR)(LPCTSTR)iPacPath);
|
|||
|
|
if ( FH )
|
|||
|
|
{
|
|||
|
|
FH->ExportFile();
|
|||
|
|
g_FileSystem.CloseFile(FH);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
g_ExportList.clear();
|
|||
|
|
PostMessage(m_hWnd,WM_COMPLETE_EXPORT,0,0);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#include "LogWnd.h"
|
|||
|
|
//------------------------------------------------------------------------
|
|||
|
|
void
|
|||
|
|
CDivPackingThread::Run()
|
|||
|
|
{
|
|||
|
|
LogWnd::CreateLog();
|
|||
|
|
|
|||
|
|
for ( size_t i = 0 ; i < m_PackingInfo.size() ; ++i )
|
|||
|
|
{
|
|||
|
|
PostMessage(m_hWnd,WM_NFS_PROGRESS_TOTAL, i, m_PackingInfo.size());
|
|||
|
|
|
|||
|
|
_PackingInfo info = m_PackingInfo[i];
|
|||
|
|
|
|||
|
|
CString szFullPath;
|
|||
|
|
szFullPath = m_OutputPath;
|
|||
|
|
szFullPath += _T("\\");
|
|||
|
|
szFullPath += info.szFileName.c_str();
|
|||
|
|
|
|||
|
|
LogWnd::TraceLog("<EFBFBD><EFBFBD>ŷ <20><><EFBFBD><EFBFBD> %s", szFullPath.GetBuffer());
|
|||
|
|
//bool bResult = g_FileSystem.OpenFileSystem(szFullPath.GetBuffer());
|
|||
|
|
//if ( bResult == false )
|
|||
|
|
{
|
|||
|
|
bool bResult = false;
|
|||
|
|
bResult = g_FileSystem.NewFileSystem(szFullPath.GetBuffer());
|
|||
|
|
bResult = g_FileSystem.OpenFileSystem(szFullPath.GetBuffer());
|
|||
|
|
if ( bResult == false )
|
|||
|
|
{
|
|||
|
|
AfxMessageBox(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ý<EFBFBD><C3BD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>"));
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
g_AddFileList.clear();
|
|||
|
|
// g_FileSystem.AddDirWithChange(info.szBaseFolder.c_str());
|
|||
|
|
|
|||
|
|
|
|||
|
|
DropFolder(info.szSrcFolder.c_str(), info.bIncludeSubFolder);
|
|||
|
|
|
|||
|
|
|
|||
|
|
AddFileList_It FileListIt = g_AddFileList.begin();
|
|||
|
|
int nMaxSize = (int)g_AddFileList.size();
|
|||
|
|
int nCnt = 0;
|
|||
|
|
LogWnd::TraceLog("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> [%d]", nMaxSize);
|
|||
|
|
for (FileListIt ; FileListIt != g_AddFileList.end() ; ++FileListIt )
|
|||
|
|
{
|
|||
|
|
AddFileInfo& info = *FileListIt;
|
|||
|
|
LogWnd::TraceLog("%s|%s", info.FilePath.c_str(), info.FileName.c_str());
|
|||
|
|
bool b = g_FileSystem.ChangeDir((*FileListIt).FilePath.c_str());
|
|||
|
|
if ( !b )
|
|||
|
|
LogWnd::TraceLog("ChangeDir <20><><EFBFBD><EFBFBD>!!!%s|%s", info.FilePath.c_str(), info.FileName.c_str());
|
|||
|
|
|
|||
|
|
b = g_FileSystem.AddFile((*FileListIt).FileName.c_str() );
|
|||
|
|
if ( !b )
|
|||
|
|
LogWnd::TraceLog("AddFile <20><><EFBFBD><EFBFBD>!!!%s|%s", info.FilePath.c_str(), info.FileName.c_str());
|
|||
|
|
nCnt++;
|
|||
|
|
|
|||
|
|
PostMessage(m_hWnd,WM_NFS_PROGRESS, nCnt, nMaxSize);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
g_AddFileList.clear();
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
LogWnd::DestroyLog();
|
|||
|
|
PostMessage(m_hWnd,WM_NFS_PROGRESS_TOTAL, m_PackingInfo.size(), m_PackingInfo.size());
|
|||
|
|
PostMessage(m_hWnd,WM_COMPLETE_MSG,0,0);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
BOOL
|
|||
|
|
CDivPackingThread::DropFolder(const TCHAR* strPath, bool bIncludeSubFolder /* = true */)
|
|||
|
|
{
|
|||
|
|
TCHAR strOldPath[_MAX_PATH] = {0, };
|
|||
|
|
GetCurrentDirectory(_MAX_PATH,strOldPath); // <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD>α<CEB1><D7B7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>丮<EFBFBD><E4B8AE> <20>˾Ƴ<CBBE><C6B3><EFBFBD>.
|
|||
|
|
SetCurrentDirectory(strPath); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̵<EFBFBD>.??
|
|||
|
|
|
|||
|
|
TCHAR strName[_MAX_FNAME] = {0, };
|
|||
|
|
g_FileSystem.GetNameOnly(strName,strPath);
|
|||
|
|
|
|||
|
|
// if(!g_FileSystem.CheckNameExist(strName))
|
|||
|
|
{
|
|||
|
|
// g_FileSystem.AddDir(strName);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if(!g_FileSystem.ChangeDir(strName))
|
|||
|
|
return FALSE;
|
|||
|
|
|
|||
|
|
|
|||
|
|
CFileFind FileFind;
|
|||
|
|
if(FileFind.FindFile())
|
|||
|
|
{
|
|||
|
|
for(BOOL bNext=TRUE;bNext;)
|
|||
|
|
{
|
|||
|
|
bNext = FileFind.FindNextFile();
|
|||
|
|
CString strP = FileFind.GetFilePath();
|
|||
|
|
CString strN = FileFind.GetFileName();
|
|||
|
|
|
|||
|
|
|
|||
|
|
if ( strP.Find(strPath) < 0 )
|
|||
|
|
{
|
|||
|
|
CString str;
|
|||
|
|
str.Format(_T("DropFolder : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٸ<EFBFBD> %s %s"), strP.GetBuffer(), strPath);
|
|||
|
|
AfxMessageBox(str);
|
|||
|
|
return FALSE;
|
|||
|
|
}
|
|||
|
|
if(strN == "." || strN == "..") continue;
|
|||
|
|
|
|||
|
|
if(FileFind.IsDirectory())
|
|||
|
|
{
|
|||
|
|
if ( bIncludeSubFolder )
|
|||
|
|
{
|
|||
|
|
BOOL bResult = DropFolder(LPCTSTR(strP), bIncludeSubFolder);
|
|||
|
|
if ( !bResult )
|
|||
|
|
return bResult;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
/* if(g_FileSystem.CheckNameExist(strN))
|
|||
|
|
{
|
|||
|
|
if(m_iOverwriteType < 0)
|
|||
|
|
m_iOverwriteType = AfxMessageBox(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̹<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.\n\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ο<EFBFBD> <20><><EFBFBD>Ϸ<EFBFBD> <20><><EFBFBD><EFBFBD>÷<EFBFBD><C3B7><EFBFBD> '<27><>' <20><>\n\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͻ÷<CFBD><C3B7><EFBFBD> '<27>ƴϿ<C6B4>' <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ֽʽÿ<CABD>!"),MB_YESNO);
|
|||
|
|
|
|||
|
|
if(m_iOverwriteType == IDNO)
|
|||
|
|
continue;
|
|||
|
|
|
|||
|
|
g_FileSystem.Remove(strN);
|
|||
|
|
}*/
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD>..
|
|||
|
|
AddFileInfo add;
|
|||
|
|
add.FileName = strP;
|
|||
|
|
add.FilePath = g_FileSystem.GetCurDir();
|
|||
|
|
g_AddFileList.push_back(add);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
FileFind.Close();
|
|||
|
|
|
|||
|
|
g_FileSystem.ChangeDir(_T(".."));
|
|||
|
|
|
|||
|
|
SetCurrentDirectory(strOldPath);
|
|||
|
|
|
|||
|
|
return TRUE;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//--------------------------------------------------------------------------------------------
|
|||
|
|
void
|
|||
|
|
CDivPackingCapacityThread::Run()
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
LogWnd::CreateLog();
|
|||
|
|
|
|||
|
|
m_TotalFileList.clear();
|
|||
|
|
m_TotalFileList.reserve(1024 * 100);
|
|||
|
|
|
|||
|
|
LogWnd::TraceLog("<EFBFBD><EFBFBD>ŷ <20>Է<EFBFBD> <20><><EFBFBD><EFBFBD> %s", m_Info.m_InputPath.GetBuffer());
|
|||
|
|
LogWnd::TraceLog("<EFBFBD><EFBFBD>ŷ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> %s", m_Info.m_OutputPath.GetBuffer());
|
|||
|
|
LogWnd::TraceLog("<EFBFBD><EFBFBD><EFBFBD>̽<EFBFBD> <20><><EFBFBD><EFBFBD> <20≯<EFBFBD> %s.%s %dMB <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>", m_Info.m_szBaseName.GetBuffer(), m_Info.m_szExtName.GetBuffer(), m_Info.nDivCapacity);
|
|||
|
|
|
|||
|
|
// <20>ش<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ϰ<EFBFBD><CFB0>ο<EFBFBD> ũ<>⸦ <20><><EFBFBD>Ѵ<EFBFBD>.
|
|||
|
|
_GetTotalFileList(m_Info.m_InputPath.GetBuffer());
|
|||
|
|
|
|||
|
|
LogWnd::TraceLog("<EFBFBD><EFBFBD>ü <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> %d <20><>", (int)m_TotalFileList.size());
|
|||
|
|
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>뷮<EFBFBD><EBB7AE> <20><><EFBFBD>κ<EFBFBD><CEBA><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
_DivFileList();
|
|||
|
|
|
|||
|
|
LogWnd::TraceLog("<EFBFBD><EFBFBD>ü <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> %d <20><>", (int)m_TotalFileList.size());
|
|||
|
|
|
|||
|
|
_Packing();
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
bool
|
|||
|
|
CDivPackingCapacityThread::_GetTotalFileList(const TCHAR* strPath)
|
|||
|
|
{
|
|||
|
|
TCHAR strOldPath[_MAX_PATH] = {0, };
|
|||
|
|
GetCurrentDirectory(_MAX_PATH,strOldPath); // <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD>α<CEB1><D7B7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>丮<EFBFBD><E4B8AE> <20>˾Ƴ<CBBE><C6B3><EFBFBD>.
|
|||
|
|
BOOL b = SetCurrentDirectory(strPath); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̵<EFBFBD>.??
|
|||
|
|
|
|||
|
|
if ( !b )
|
|||
|
|
{
|
|||
|
|
DWORD nErr = GetLastError();
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
CFileFind FileFind;
|
|||
|
|
if(FileFind.FindFile())
|
|||
|
|
{
|
|||
|
|
for(BOOL bNext=TRUE;bNext;)
|
|||
|
|
{
|
|||
|
|
bNext = FileFind.FindNextFile();
|
|||
|
|
CString strP = FileFind.GetFilePath();
|
|||
|
|
CString strN = FileFind.GetFileName();
|
|||
|
|
|
|||
|
|
|
|||
|
|
if ( strP.Find(strPath) < 0 )
|
|||
|
|
{
|
|||
|
|
CString str;
|
|||
|
|
str.Format(_T("DropFolder : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٸ<EFBFBD> %s %s"), strP.GetBuffer(), strPath);
|
|||
|
|
AfxMessageBox(str);
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
if(strN == "." || strN == "..") continue;
|
|||
|
|
|
|||
|
|
if(FileFind.IsDirectory())
|
|||
|
|
{
|
|||
|
|
bool bResult = _GetTotalFileList(LPCTSTR(strP));
|
|||
|
|
if ( !bResult )
|
|||
|
|
return bResult;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
FileInfo info;
|
|||
|
|
info.szFileName = strN;
|
|||
|
|
info.szFilePath = strP;
|
|||
|
|
|
|||
|
|
DWORD nFileSize = 0;
|
|||
|
|
_GetFileSize(strP.GetBuffer(), nFileSize);
|
|||
|
|
|
|||
|
|
info.nFileSize = (__int64)nFileSize;
|
|||
|
|
m_TotalFileList.push_back(info);
|
|||
|
|
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
FileFind.Close();
|
|||
|
|
|
|||
|
|
|
|||
|
|
SetCurrentDirectory(strOldPath);
|
|||
|
|
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
bool
|
|||
|
|
CDivPackingCapacityThread::_GetFileSize(const TCHAR* strPath, DWORD& nFileSize )
|
|||
|
|
{
|
|||
|
|
HANDLE hFile = INVALID_HANDLE_VALUE;
|
|||
|
|
hFile = CreateFile(strPath, GENERIC_READ, 0, NULL, OPEN_EXISTING,
|
|||
|
|
FILE_ATTRIBUTE_NORMAL,NULL );
|
|||
|
|
|
|||
|
|
if ( hFile == INVALID_HANDLE_VALUE )
|
|||
|
|
return false;
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD> ũ<>⸦ <20>˾Ƴ<CBBE><C6B3><EFBFBD>.
|
|||
|
|
DWORD _nFileSize = 0;
|
|||
|
|
nFileSize = 0;
|
|||
|
|
_nFileSize = GetFileSize(hFile, NULL);
|
|||
|
|
if(!_nFileSize)
|
|||
|
|
{
|
|||
|
|
CloseHandle(hFile);
|
|||
|
|
nFileSize = _nFileSize;
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
CloseHandle(hFile);
|
|||
|
|
nFileSize = _nFileSize;
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
bool
|
|||
|
|
CDivPackingCapacityThread::_DivFileList()
|
|||
|
|
{
|
|||
|
|
// <20>ִ<EFBFBD><D6B4><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>γ<EFBFBD><CEB3><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ֱ<EFBFBD> <20><><EFBFBD>ؼ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ѹ<EFBFBD><D1B9><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
for ( size_t i = 0 ; i < m_TotalFileList.size() ; i++ )
|
|||
|
|
{
|
|||
|
|
FileInfo& info = m_TotalFileList[i];
|
|||
|
|
m_TotalFileMaps.insert(std::make_pair(info.szFilePath, info));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
m_DivisionList.clear();
|
|||
|
|
|
|||
|
|
FileListInfo filelist_info;
|
|||
|
|
filelist_info.clear();
|
|||
|
|
__int64 nCapa = m_Info.nDivCapacity*1024*1024;
|
|||
|
|
|
|||
|
|
int nFileCnt = 0;
|
|||
|
|
std::map<CString, FileInfo>::iterator it = m_TotalFileMaps.begin();
|
|||
|
|
for ( it ; it != m_TotalFileMaps.end() ; it++ )
|
|||
|
|
{
|
|||
|
|
FileInfo& info = it->second;
|
|||
|
|
|
|||
|
|
filelist_info.nFileCnt++;
|
|||
|
|
filelist_info.nTotalFileBytes += info.nFileSize;
|
|||
|
|
filelist_info.FileList.push_back(info);
|
|||
|
|
|
|||
|
|
|
|||
|
|
if ( filelist_info.nTotalFileBytes+info.nFileSize >= nCapa )
|
|||
|
|
{
|
|||
|
|
LogWnd::TraceLog("[%d]<5D><> <20><><EFBFBD><EFBFBD> [Cnt:%3d] FileSortList %s(%d)" , nFileCnt, filelist_info.nFileCnt, info.szFilePath.GetBuffer(), info.nFileSize );
|
|||
|
|
|
|||
|
|
m_DivisionList.push_back(filelist_info);
|
|||
|
|
filelist_info.clear();
|
|||
|
|
nFileCnt++;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߰<EFBFBD>
|
|||
|
|
m_DivisionList.push_back(filelist_info);
|
|||
|
|
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bool
|
|||
|
|
CDivPackingCapacityThread::_Packing()
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
CString szCurFileName;
|
|||
|
|
|
|||
|
|
LogWnd::TraceLog("<EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><> %d <20><> " , m_DivisionList.size() );
|
|||
|
|
for ( size_t i = 0 ; i < m_DivisionList.size() ; i++ )
|
|||
|
|
{
|
|||
|
|
szCurFileName.Format(_T("%s%d.%s"), m_Info.m_szBaseName.GetBuffer(), i, m_Info.m_szExtName.GetBuffer());
|
|||
|
|
FileListInfo& filelist_info = m_DivisionList[i];
|
|||
|
|
|
|||
|
|
CString strPath;
|
|||
|
|
strPath = m_Info.m_OutputPath;
|
|||
|
|
strPath += "\\";
|
|||
|
|
strPath += szCurFileName;
|
|||
|
|
|
|||
|
|
LogWnd::TraceLog("NewFileSystem %s" , strPath.GetBuffer());
|
|||
|
|
|
|||
|
|
bool bResult = g_FileSystem.NewFileSystem(strPath.GetBuffer());
|
|||
|
|
if ( !bResult )
|
|||
|
|
LogWnd::TraceLog("NewFileSystem Error %s" , strPath.GetBuffer());
|
|||
|
|
|
|||
|
|
bResult = g_FileSystem.OpenFileSystem(strPath.GetBuffer());
|
|||
|
|
if ( !bResult )
|
|||
|
|
LogWnd::TraceLog("NewFileSystem Error %s" , strPath.GetBuffer());
|
|||
|
|
|
|||
|
|
bResult = g_FileSystem.ChangeDir("\\");
|
|||
|
|
if ( bResult )
|
|||
|
|
LogWnd::TraceLog("NewFileSystem Success %s" , strPath.GetBuffer());
|
|||
|
|
|
|||
|
|
|
|||
|
|
for ( size_t j = 0 ; j < filelist_info.FileList.size() ; j++ )
|
|||
|
|
{
|
|||
|
|
FileInfo& info = filelist_info.FileList[j];
|
|||
|
|
CString szNewPath = info.szFilePath;
|
|||
|
|
szNewPath.Delete(0, m_Info.m_InputPath.GetLength());
|
|||
|
|
_AddFileWithFolder(std::string(szNewPath.GetBuffer()), info);
|
|||
|
|
PostMessage(m_hWnd,WM_NFS_PROGRESS_CAP, j, filelist_info.FileList.size());
|
|||
|
|
}
|
|||
|
|
g_FileSystem.CloseFileSystem();
|
|||
|
|
|
|||
|
|
PostMessage(m_hWnd,WM_NFS_PROGRESS_TOTAL_CAP, i, m_DivisionList.size());
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
LogWnd::DestroyLog();
|
|||
|
|
PostMessage(m_hWnd,WM_NFS_PROGRESS_TOTAL_CAP, m_DivisionList.size(), m_DivisionList.size());
|
|||
|
|
PostMessage(m_hWnd,WM_COMPLETE_MSG_CAP,0,0);
|
|||
|
|
LogWnd::TraceLog("------------------ <20>Ϸ<EFBFBD> --------------------");
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bool
|
|||
|
|
CDivPackingCapacityThread::_AddFileWithFolder(std::string& szPath, FileInfo& info)
|
|||
|
|
{
|
|||
|
|
CHAR drive[2048] = {0,};
|
|||
|
|
CHAR dir[2048] = {0,};
|
|||
|
|
CHAR fname[2048] = {0,};
|
|||
|
|
CHAR ext[2048] = {0,};
|
|||
|
|
|
|||
|
|
_splitpath( szPath.c_str(), drive, dir, fname, ext );
|
|||
|
|
|
|||
|
|
std::string szNewPath = dir;
|
|||
|
|
std::string szFileName;
|
|||
|
|
szFileName = fname;
|
|||
|
|
szFileName += ext;
|
|||
|
|
|
|||
|
|
std::vector<std::string> tokens;
|
|||
|
|
TokenizeA(szNewPath, tokens, std::string("\\"));
|
|||
|
|
|
|||
|
|
g_FileSystem.ChangeDir("\\");
|
|||
|
|
for ( size_t i = 0 ; i < tokens.size() ; i++ )
|
|||
|
|
{
|
|||
|
|
std::string szFolder = tokens[i];
|
|||
|
|
bool bResult = g_FileSystem.ChangeDir(szFolder.c_str());
|
|||
|
|
/* if (!bResult)
|
|||
|
|
{
|
|||
|
|
g_FileSystem.AddDirWithChange(szFolder.c_str());
|
|||
|
|
}*/
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
LogWnd::TraceLog("AddFile %s(%d)" , info.szFilePath.GetBuffer(), info.nFileSize );
|
|||
|
|
g_FileSystem.AddFile(info.szFilePath.GetBuffer());
|
|||
|
|
// LogWnd::TraceLog("_AddFileWithFolder %s" , info.szFilePath.GetBuffer());
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
//------------------------------------------------------------------------
|
|||
|
|
void PatchLog::Log(const TCHAR* fmt, ...)
|
|||
|
|
{
|
|||
|
|
static TCHAR gs_Buffer[8192] = { _T('0'), };
|
|||
|
|
|
|||
|
|
ZeroMemory(gs_Buffer, sizeof(TCHAR) * 8192);
|
|||
|
|
va_list args;
|
|||
|
|
va_start( args, fmt );
|
|||
|
|
_vsntprintf_s( gs_Buffer, 8192-1, fmt, args );
|
|||
|
|
va_end( args );
|
|||
|
|
gs_Buffer[8192-1] = 0;
|
|||
|
|
|
|||
|
|
CString str;
|
|||
|
|
str = gs_Buffer;
|
|||
|
|
str += _T('\n');
|
|||
|
|
|
|||
|
|
TRACE(str.GetBuffer());
|
|||
|
|
|
|||
|
|
LogWnd::TraceLog( _T("%s"), str.GetBuffer() );
|
|||
|
|
}
|
|||
|
|
PatchLog g_PatchLog;
|
|||
|
|
|
|||
|
|
PatchThread::PatchThread(HWND hWnd, std::string& szFileName)
|
|||
|
|
{
|
|||
|
|
m_hWnd = hWnd;
|
|||
|
|
m_srcPackFilePath = szFileName;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
PatchThread::~PatchThread()
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void
|
|||
|
|
PatchThread::OnPatch(int nCurrentCnt, int nMaxCount, std::string szFilename)
|
|||
|
|
{
|
|||
|
|
if ( g_pWorking )
|
|||
|
|
g_pWorking->PostMessage(WM_NFS_PROGRESS, nCurrentCnt, nMaxCount);
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void
|
|||
|
|
PatchThread::OnError(int nErrorCode, std::string szMsg)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void
|
|||
|
|
PatchThread::Run()
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
//g_FileSystem.SetLogger(&g_PatchLog);
|
|||
|
|
bool bResult = g_FileSystem.Patch( m_srcPackFilePath.c_str(), this, NULL);
|
|||
|
|
|
|||
|
|
PostMessage(m_hWnd,WM_COMPLETE_PATCH, bResult,0);
|
|||
|
|
|
|||
|
|
}
|