DragonNest/Client/EtFileSystemTool/NxFileSystemToolDlg.cpp

1285 lines
58 KiB
C++
Raw Normal View History

2024-12-20 16:56:44 +08:00
<EFBFBD><EFBFBD>#include "stdafx.h"
#include "NxFileSystemTool.h"
#include "NxFileSystemToolDlg.h"
#include "NewFolderDlg.h"
#include "ExportBrowseFolder.h"
#include "WorkDialog.h"
#include "BuildDivisionPacking.h"
#include "BuildDivisionPackingCapacity.h"
#include "LogWnd.h"
#include "SundriesFunc.h"
#include "SHFolderDialog.h"
#include <list>
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
#pragma warning(disable:4311)
// <EFBFBD> <EFBFBD>\<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CAboutDlg <EFBFBD>T<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>Dž<EFBFBD>Ȳ<EFBFBD><EFBFBD>.
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// <EFBFBD>T<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> p<EFBFBD>t<EFBFBD>0<EFBFBD>
enum { IDD = IDD_ABOUTBOX };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// l<EFBFBD><EFBFBD>
protected:
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()
// CNxFileSystemToolDlg <EFBFBD>T<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CNxFileSystemToolDlg::CNxFileSystemToolDlg(CWnd* pParent /*=NULL*/)
: CDialog(CNxFileSystemToolDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_iOverwriteType = -1;
}
void
CNxFileSystemToolDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_FILE_LIST, m_FileList);
DDX_Control(pDX, IDC_NAVI , m_Edit);
}
BEGIN_MESSAGE_MAP(CNxFileSystemToolDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_WM_SIZE()
ON_COMMAND(ID_LOADSYSTEM, OnLoadsystem)
ON_COMMAND(ID_NEWSYSTEM, OnNewsystem)
ON_COMMAND(ID_FILESYSTEM_CLOSE, OnFilesystemClose)
ON_COMMAND(ID_INSERT_FILE, OnInsertFile)
ON_MESSAGE(WM_COMPLETE_MSG, OnCompleteMsg)
ON_MESSAGE(WM_COMPLETE_OPTIMIZE, OnComplete_Optimize)
ON_MESSAGE(WM_COMPLETE_EXPORT, OnComplete_Export)
ON_COMMAND(ID_NEW_FOLDER, OnNewFolder)
ON_COMMAND(ID_REMOVE, OnRemove)
ON_NOTIFY(NM_DBLCLK, IDC_FILE_LIST, OnNMDblclkFileList)
ON_NOTIFY(LVN_ENDLABELEDIT, IDC_FILE_LIST, OnLvnEndlabeleditFileList)
ON_COMMAND(ID_IPAC_EXIT, OnIpacExit)
ON_COMMAND(ID_OPTIMIZE, OnOptimize)
ON_COMMAND(ID_RENAME, OnRename)
ON_COMMAND(ID_EXPORT, OnExport)
ON_COMMAND(ID_ABOUT, OnAbout)
ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedButton1)
ON_COMMAND(ID_MENU_DIV_PACKING, &CNxFileSystemToolDlg::OnMenuDivPacking)
ON_COMMAND(ID_MENU_DIV_PACKING_CAPACITY, &CNxFileSystemToolDlg::OnMenuDivPackingCapacity)
ON_COMMAND(ID_PATCH, &CNxFileSystemToolDlg::OnPatch)
ON_MESSAGE(WM_COMPLETE_PATCH, OnCompletePatch)
ON_COMMAND(ID_COMPARE, &CNxFileSystemToolDlg::OnCompare)
ON_COMMAND(ID_INSERT_FOLDER, &CNxFileSystemToolDlg::OnInsertFolder)
END_MESSAGE_MAP()
// CNxFileSystemToolDlg T<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>̬<EFBFBD>0<EFBFBD>
BOOL
CNxFileSystemToolDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// <EFBFBD>¤<EFBFBD>\<EFBFBD> T<EFBFBD>t<EFBFBD><EFBFBD><EFBFBD> "<15><><EFBFBD>..." T<EFBFBD>t<EFBFBD> <EFBFBD>D<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>i<EFBFBD>Ȳ<EFBFBD><EFBFBD>.
// IDM_ABOUTBOX<EFBFBD><EFBFBD> <EFBFBD>¤<EFBFBD>\<EFBFBD> <EFBFBD><EFBFBD>9<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>Ǵ<EFBFBD>|<EFBFBD> i<EFBFBD>Ȳ<EFBFBD><EFBFBD>.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// t<EFBFBD> <EFBFBD>T<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD> D<EFBFBD>t<EFBFBD>X<EFBFBD>D<EFBFBD> $<EFBFBD><EFBFBD>i<EFBFBD>Ȳ<EFBFBD><EFBFBD>. <EFBFBD> <EFBFBD>\<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD> <EFBFBD><EFBFBD> =<EFBFBD>t<EFBFBD> <EFBFBD>T<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> D<EFBFBD>в <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŕ<EFBFBD>
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>l<EFBFBD><EFBFBD> t<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>D<EFBFBD> <EFBFBD><EFBFBD>ٳ<<EFBFBD>\<EFBFBD> ‰<EFBFBD>i<EFBFBD>Ȳ<EFBFBD><EFBFBD>.
SetIcon(m_hIcon, TRUE); // p<EFBFBD> D<EFBFBD>t<EFBFBD>X<EFBFBD>D<EFBFBD> $<EFBFBD><EFBFBD>i<EFBFBD>Ȳ<EFBFBD><EFBFBD>.
SetIcon(m_hIcon, FALSE); // <EFBFBD><EFBFBD>@<EFBFBD> D<EFBFBD>t<EFBFBD>X<EFBFBD>D<EFBFBD> $<EFBFBD><EFBFBD>i<EFBFBD>Ȳ<EFBFBD><EFBFBD>.
// TODO: <EFBFBD><EFBFBD>0<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD>0<EFBFBD>T<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>D<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>i<EFBFBD>Ȳ<EFBFBD><EFBFBD>.
m_FileList.DragAcceptFiles();
m_FileList.SetExtendedStyle(LVS_EX_FULLROWSELECT);
RECT Rect;
m_FileList.GetWindowRect(&Rect);
const int COLUMN_WIDTH_GAB = 4;
const int SIZECOLUMN_WIDTH = 300;
const int SIZECOLUMN_WIDTH2 = 80;
m_FileList.InsertColumn(0,_T("<74>"),LVCFMT_LEFT,SIZECOLUMN_WIDTH);
m_FileList.InsertColumn(1,_T("l<>0<EFBFBD>"),LVCFMT_LEFT,SIZECOLUMN_WIDTH2);
m_FileList.InsertColumn(2,_T("<00><><EFBFBD><EFBFBD>l<EFBFBD>0<EFBFBD>"),LVCFMT_LEFT,SIZECOLUMN_WIDTH2);
m_FileList.InsertColumn(3,_T("$<24><><EFBFBD>"),LVCFMT_LEFT,SIZECOLUMN_WIDTH);
m_ImageList.Create(IDB_FILE_LIST_ICON,16,2,RGB(0,255,0));
m_FileList.SetImageList(&m_ImageList,LVSIL_SMALL);
m_bWorking = false; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>x<EFBFBD><EFBFBD><EFBFBD> D<EFBFBD>̲<EFBFBD><EFBFBD>.. <EFBFBD>0<EFBFBD>T<EFBFBD>
m_FileList.SetFocus();
// LogWnd::CreateLog();
return TRUE; // <EFBFBD>θ<EFBFBD>d<EFBFBD><EFBFBD><EFBFBD> <EFBFBD>\<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>Τ<EFBFBD>|<EFBFBD> $<EFBFBD><EFBFBD>X<EFBFBD><EFBFBD><EFBFBD> J<EFBFBD>D<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> TRUE|<EFBFBD> <EFBFBD>X<EFBFBD>i<EFBFBD>Ȳ<EFBFBD><EFBFBD>.
}
void
CNxFileSystemToolDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// <EFBFBD>T<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> \͌<EFBFBD>T<EFBFBD> <EFBFBD>|<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>`<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> D<EFBFBD>t<EFBFBD>X<EFBFBD>D<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>$<EFBFBD>t<EFBFBD>
// <EFBFBD> T<EFBFBD>ܴ<EFBFBD> <EFBFBD>i<EFBFBD>Ȳ<EFBFBD><EFBFBD>. 8<EFBFBD><EFBFBD>/<EFBFBD><EFBFBD> <EFBFBD><EFBFBD>x<EFBFBD>D<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MFC <EFBFBD> <EFBFBD>\<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŕ<EFBFBD>
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>l<EFBFBD><EFBFBD><EFBFBD><EFBFBD> t<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>D<EFBFBD> <EFBFBD><EFBFBD>ٳ<<EFBFBD>\<EFBFBD> ‰<EFBFBD>i<EFBFBD>Ȳ<EFBFBD><EFBFBD>.
void
CNxFileSystemToolDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD>|<EFBFBD> <EFBFBD>\<EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>¸<EFBFBD>
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// t<EFBFBD>|<EFBFBD>tǸŸ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> D<EFBFBD>t<EFBFBD>X<EFBFBD>D<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>p<EFBFBD><EFBFBD><EFBFBD> ޹<EFBFBD><EFBFBD>Ȳ<EFBFBD><EFBFBD>.
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// D<EFBFBD>t<EFBFBD>X<EFBFBD>D<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȳ<EFBFBD><EFBFBD>.
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// <EFBFBD><EFBFBD><EFBFBD>Ɛ<EFBFBD><EFBFBD> \͌<EFBFBD>T<EFBFBD><EFBFBD> =<EFBFBD>D<EFBFBD> D<EFBFBD><EFBFBD><EFBFBD> ٳH<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> \<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij]<EFBFBD> <EFBFBD>¤<EFBFBD>\<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// t<EFBFBD> h<EFBFBD><EFBFBD>|<EFBFBD> 8֜<EFBFBD>i<EFBFBD>Ȳ<EFBFBD><EFBFBD>.
HCURSOR
CNxFileSystemToolDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
BOOL
CNxFileSystemToolDlg::PreTranslateMessage(MSG* pMsg)
{
switch(pMsg->wParam)
{
case VK_ESCAPE:
pMsg->wParam=NULL; // ESC <EFBFBD><EFBFBD> 4<EFBFBD><EFBFBD><EFBFBD>\<EFBFBD><EFBFBD><EFBFBD>.
break;
case VK_RETURN:
pMsg->wParam=NULL; // <EFBFBD><EFBFBD>0<EFBFBD>ij 4<EFBFBD><EFBFBD><EFBFBD>\<EFBFBD><EFBFBD><EFBFBD>.
break;
}
switch(pMsg->message)
{
case WM_DROPFILES:
if(pMsg->hwnd == m_FileList.GetSafeHwnd())
DropFile((HDROP)pMsg->wParam);
break;
case WM_KEYDOWN:
if(pMsg->hwnd == m_FileList.GetSafeHwnd() && pMsg->wParam == VK_DELETE)
OnRemove();
break;
}
return CDialog::PreTranslateMessage(pMsg);
}
void
CNxFileSystemToolDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
const int SIZECOLUMN_WIDTH = 300;
const int SIZECOLUMN_WIDTH2 = 60;
CRect rt;
// TODO: <EFBFBD><EFBFBD>0<EFBFBD><EFBFBD><EFBFBD> T<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>̬<EFBFBD>0<EFBFBD> T<EFBFBD>ܴ|<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>i<EFBFBD>Ȳ<EFBFBD><EFBFBD>.
if (m_FileList.GetSafeHwnd() != NULL )
{
m_FileList.SetWindowPos(NULL,10,35,cx-22,cy-48,SWP_NOZORDER);
//Client <EFBFBD><EFBFBD><EFBFBD>X<EFBFBD> l<EFBFBD>0<EFBFBD>|<EFBFBD> l<EFBFBD>\<EFBFBD><EFBFBD><EFBFBD>.
m_FileList.GetClientRect(&rt);
}
}
static int
CALLBACK FileListItemSortFunc(LPARAM lParam1,LPARAM lParam2,LPARAM /*lParamSort*/)
{
SNxFileInfo* pFH1 = (SNxFileInfo*)lParam1;
SNxFileInfo* pFH2 = (SNxFileInfo*)lParam2;
CString strItem1;
if(pFH1->nFileType == NFS_DIR)
{
strItem1.Format(_T("!%s"),pFH1->szFileName);
}
else
{
strItem1 = pFH1->szFileName;
}
CString strItem2;
if(pFH2->nFileType == NFS_DIR)
{
strItem2.Format(_T("!%s"),pFH2->szFileName);
}
else
{
strItem2 = pFH2->szFileName;
}
return _tcscmp(strItem1,strItem2);
}
void
CNxFileSystemToolDlg::UpdateFileList()
{
m_FileList.DeleteAllItems();
int i;
CString strFileSize;
CString OriFileSize;
std::vector< SPackingFileInfo * > vecFileInfo;
std::vector< std::string > vecDirList;
g_FileSystem.GetFileInfoListCurDir( vecFileInfo );
g_FileSystem.GetDirListCurDir( vecDirList );
m_vecFileInfo.resize( vecFileInfo.size() + vecDirList.size() );
for( i = 0; i < ( int )vecFileInfo.size(); i++ )
{
_GetFullFileName( m_vecFileInfo[ i ].szFileName, _countof(m_vecFileInfo[ i ].szFileName), vecFileInfo[ i ]->szFileName );
m_vecFileInfo[ i ].dwCompressSize = vecFileInfo[ i ]->dwCompressSize;
m_vecFileInfo[ i ].dwOriginalSize = vecFileInfo[ i ]->dwOriginalSize;
m_vecFileInfo[ i ].nFileType = NFS_FILE;
}
for( i = 0; i < ( int )vecDirList.size(); i++ )
{
strcpy_s( m_vecFileInfo[ vecFileInfo.size() + i ].szFileName, _MAX_PATH, vecDirList[ i ].c_str() );
m_vecFileInfo[ vecFileInfo.size() + i ].nFileType = NFS_DIR;
}
for( i = 0; i < ( int )m_vecFileInfo.size(); i++ )
{
m_FileList.InsertItem( i, m_vecFileInfo[ i ].szFileName, 1 );
m_FileList.SetItemData( i, ( DWORD )( &m_vecFileInfo[ i ] ) );
if( m_vecFileInfo[ i ].nFileType == NFS_FILE )
{
strFileSize.Format(_T("%dKB"),( m_vecFileInfo[ i ].dwCompressSize + 999 ) / 1000 );
m_FileList.SetItemText(i,1,LPCTSTR(strFileSize));
OriFileSize.Format(_T("%dKB"),( m_vecFileInfo[ i ].dwOriginalSize + 999 ) / 1000 );
m_FileList.SetItemText(i,2,LPCTSTR(OriFileSize));
}
}
m_FileList.SortItems(FileListItemSortFunc,NULL);
this->SetDlgItemText(IDC_NAVI,g_FileSystem.GetCurDir());
}
void
CNxFileSystemToolDlg::OnLoadsystem()
{
if ( m_bWorking )
{
AfxMessageBox(_T("D<><44><EFBFBD> <00><><EFBFBD><EFBFBD>t<EFBFBD> <00>ɉ<EFBFBD>Ʌ<>Ȳ<EFBFBD><C8B2>."));
return ;
}
CFileDialog Dlg(TRUE,_T(".pak"),NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,_T(" <0C>|<7C>(*.pak)|*.pak||"),NULL);
if(Dlg.DoModal() == IDCANCEL) return;
if(!g_FileSystem.OpenFileSystem(LPCTSTR(Dlg.GetPathName())))
{
// <EFBFBD>|<EFBFBD> <EFBFBD>¤<EFBFBD>\<EFBFBD> <EFBFBD><EFBFBD>0<EFBFBD>\<EFBFBD> H<EFBFBD><EFBFBD>Ŭ<EFBFBD>t<EFBFBD> }<EFBFBD>0<EFBFBD>\<EFBFBD>|<EFBFBD>ij <EFBFBD><EFBFBD><EFBFBD><EFBFBD>..
if( !g_FileSystem.OpenFileSystem(LPCTSTR(Dlg.GetPathName()), true ))
{
AfxMessageBox(_T(" <0C>|<7C><>¤<EFBFBD>\<EFBFBD>D<EFBFBD> <00><><EFBFBD><EFBFBD> <00><>X<EFBFBD><00>p<EFBFBD><70><EFBFBD> <00>ǻ<EFBFBD><1C> <0C>|<7C> <00><>Ȳ<EFBFBD><C8B2>."));
return;
}
}
m_strPath = Dlg.GetPathName();
UpdateFileList();
}
void
CNxFileSystemToolDlg::OnNewsystem()
{
if ( m_bWorking )
{
AfxMessageBox(_T("D<><44><EFBFBD> <00><><EFBFBD><EFBFBD>t<EFBFBD> <00>ɉ<EFBFBD>Ʌ<>Ȳ<EFBFBD><C8B2>."));
return ;
}
CFileDialog Dlg(FALSE,_T(".Nfs"),_T("NewSystem.pak"),OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,_T(" <0C>|<7C>(*.pak)|*.pak||"),NULL);
if(Dlg.DoModal() == IDCANCEL) return;
if(!g_FileSystem.NewFileSystem(LPCTSTR(Dlg.GetPathName())))
{
AfxMessageBox(_T("<00><>\<EFBFBD><EFBFBD><EFBFBD> <0C>|<7C><>¤<EFBFBD>\<EFBFBD> <00><>1<EFBFBD><31><EFBFBD> <00><>(<28> X<>Ƶ<>Ȳ<EFBFBD><C8B2>."));
return;
}
if(!g_FileSystem.OpenFileSystem(LPCTSTR(Dlg.GetPathName())))
{
AfxMessageBox(_T("<00><> <0C>|<7C> <00>¤<EFBFBD>\<EFBFBD>D<EFBFBD> <00><>1<EFBFBD>X<EFBFBD><00><><EFBFBD>̹ \<EFBFBD>ܴX<EFBFBD><EFBFBD><EFBFBD> <00><>X<EFBFBD>Ƶ<>Ȳ<EFBFBD><C8B2>."));
return;
}
m_strPath = Dlg.GetPathName();
UpdateFileList();
}
void
CNxFileSystemToolDlg::OnFilesystemClose()
{
if ( m_bWorking )
{
AfxMessageBox(_T("D<><44><EFBFBD> <00><><EFBFBD><EFBFBD>t<EFBFBD> <00>ɉ<EFBFBD>Ʌ<>Ȳ<EFBFBD><C8B2>."));
return ;
}
// TODO: <EFBFBD><EFBFBD>0<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>9<EFBFBD> <EFBFBD>̬<EFBFBD>0<EFBFBD> T<EFBFBD>ܴ|<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>i<EFBFBD>Ȳ<EFBFBD><EFBFBD>.
g_FileSystem.CloseFileSystem();
m_strPath.Empty();
UpdateFileList();
}
BOOL
CNxFileSystemToolDlg::DestroyWindow()
{
// TODO: <EFBFBD><EFBFBD>0<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>T<EFBFBD><EFBFBD> T<EFBFBD>ܴ|<EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD>/<EFBFBD><EFBFBD><EFBFBD> 0<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>|<EFBFBD> 8֜<EFBFBD>i<EFBFBD>Ȳ<EFBFBD><EFBFBD>.
SAFE_DELETE (g_pAddThread);
return CDialog::DestroyWindow();
}
LRESULT
CNxFileSystemToolDlg::OnCompleteMsg(WPARAM wParam, LPARAM lParam)
{
SAFE_DELETE (g_pAddThread);
m_bWorking = false;
::PostMessage(g_pWorking->GetSafeHwnd(),WM_DESTROY,0,0);
SAFE_DELETE(g_pWorking);
UpdateFileList();
return TRUE;
}
void CNxFileSystemToolDlg::OnInsertFile()
{
if ( m_bWorking )
{
AfxMessageBox(_T("D<><44><EFBFBD> <00><><EFBFBD><EFBFBD>t<EFBFBD> <00>ɉ<EFBFBD>Ʌ<>Ȳ<EFBFBD><C8B2>."));
return;
}
// TODO: <EFBFBD><EFBFBD>0<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>9<EFBFBD> <EFBFBD>̬<EFBFBD>0<EFBFBD> T<EFBFBD>ܴ|<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>i<EFBFBD>Ȳ<EFBFBD><EFBFBD>.
if(!m_FileList.GetItemCount())
{
AfxMessageBox(_T(" <0C>|<7C><>¤<EFBFBD>\<EFBFBD>t<EFBFBD> <00><>1<EFBFBD><18><><EFBFBD> <00><><EFBFBD><EFBFBD> <4A>Ȳ<EFBFBD><C8B2>."));
return;
}
CFileDialog Dlg(TRUE);
if(Dlg.DoModal() == IDCANCEL)
return;
TCHAR strName[_MAX_FNAME];
g_FileSystem.GetNameOnly(strName,Dlg.GetPathName().GetBuffer());
/* if(g_FileSystem.CheckNameExist(strName))
{
if(AfxMessageBox(_T("ٳ|<7C>\<EFBFBD> <74>X<EFBFBD> <0C>|<7C>t<EFBFBD> t<><74><EFBFBD> <74>i<EFBFBD>Ȳ<EFBFBD><C8B2>.\n\n<00><><EFBFBD><EFBFBD> <0C>|<7C>D<EFBFBD> <00><>\<EFBFBD><EFBFBD><EFBFBD> <0C>|<7C>\<EFBFBD> n<><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>$<24>t<EFBFBD> '<08>' |<7C>\n\n<00><><EFBFBD><EFBFBD> 0<>t<EFBFBD>X<EFBFBD> <0C>|<7C>D<EFBFBD> <00><>t<EFBFBD>X<EFBFBD><58><EFBFBD>$<24>t<EFBFBD> 'D<>Ȳ$<24>' |<7C> <0C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>$<24>! "),MB_YESNO) == IDNO) return;
g_FileSystem.Remove(strName);
}*/
// <EFBFBD> <EFBFBD><EFBFBD><EFBFBD>.. D<EFBFBD><EFBFBD><EFBFBD>0<EFBFBD>..
DrawWorking();
AddFileInfo add;
add.FileName = LPCTSTR( Dlg.GetPathName() );
add.FilePath = g_FileSystem.GetCurDir();
g_AddFileList.push_back(add);
// <EFBFBD>|<EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>‘<EFBFBD>!
g_pAddThread = new CFileImportThread(this->GetSafeHwnd());
g_pAddThread->Start();
m_bWorking = true;
}
void CNxFileSystemToolDlg::OnInsertFolder()
{
if ( m_bWorking )
{
AfxMessageBox(_T("D<><44><EFBFBD> <00><><EFBFBD><EFBFBD>t<EFBFBD> <00>ɉ<EFBFBD>Ʌ<>Ȳ<EFBFBD><C8B2>."));
return;
}
// TODO: <EFBFBD><EFBFBD>0<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>9<EFBFBD> <EFBFBD>̬<EFBFBD>0<EFBFBD> T<EFBFBD>ܴ|<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>i<EFBFBD>Ȳ<EFBFBD><EFBFBD>.
if(!m_FileList.GetItemCount())
{
AfxMessageBox(_T(" <0C>|<7C><>¤<EFBFBD>\<EFBFBD>t<EFBFBD> <00><>1<EFBFBD><18><><EFBFBD> <00><><EFBFBD><EFBFBD> <4A>Ȳ<EFBFBD><C8B2>."));
return;
}
CString strSelectedPath;
if( !CSHFolderDialog::BrowseForFolder( strSelectedPath, _T("Choose a Folder:"), m_hWnd, 0, 0, NULL ) == IDOK )
{
return;
}
SearchFolderAndAddFile( strSelectedPath.GetBuffer() );
// <EFBFBD> <EFBFBD><EFBFBD><EFBFBD>.. D<EFBFBD><EFBFBD><EFBFBD>0<EFBFBD>..
DrawWorking();
// <EFBFBD>|<EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>‘<EFBFBD>!
g_pAddThread = new CFileImportThread(this->GetSafeHwnd());
g_pAddThread->Start();
m_bWorking = true;
}
void CNxFileSystemToolDlg::SearchFolderAndAddFile( const char *szFolderName )
{
char acCommonBuffer[1024];
sprintf(acCommonBuffer, szFolderName);
strcat(acCommonBuffer, "/*.*");
HANDLE hSearchFile;
WIN32_FIND_DATA wfd;
BOOL bResult = TRUE;
// <EFBFBD><EFBFBD>T<EFBFBD>H<EFBFBD><EFBFBD><EFBFBD> <EFBFBD>ǔ<EFBFBD> <EFBFBD>|<EFBFBD>D<EFBFBD> ><EFBFBD>D<EFBFBD> Œ<EFBFBD>\<EFBFBD><EFBFBD><EFBFBD>.
hSearchFile = FindFirstFile(acCommonBuffer, &wfd);
if (hSearchFile == INVALID_HANDLE_VALUE)
return;
std::string strSubFolder;
std::string::size_type szLength;
if( m_strRootFolder.length() == 0 )
{
std::string strTemp = szFolderName;
szLength = strTemp.rfind( "\\" );
strTemp.erase( szLength );
m_strRootFolder = strTemp;
}
std::string strFolderName = szFolderName;
strFolderName.erase( 0, m_strRootFolder.length() );
strSubFolder = strFolderName + "\\";
// T<EFBFBD><EFBFBD> ><EFBFBD>X<EFBFBD><EFBFBD><EFBFBD>t<EFBFBD>,
while (bResult)
{
// <EFBFBD>|<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> m<EFBFBD><EFBFBD><EFBFBD> ƴ<EFBFBD><EFBFBD> <EFBFBD>t<EFBFBD><EFBFBD><EFBFBD>. <EFBFBD><EFBFBD>T<EFBFBD>@<EFBFBD> <EFBFBD>|<EFBFBD> l<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>T<EFBFBD><EFBFBD>Ŕ<EFBFBD> m<EFBFBD><EFBFBD><EFBFBD> . <EFBFBD><EFBFBD> .. <EFBFBD><EFBFBD>T<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>. t<EFBFBD>t<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>0<EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD>x<EFBFBD> <EFBFBD><EFBFBD>T<EFBFBD>|<EFBFBD>t<EFBFBD>,
if (wfd.cFileName[0] != '.')
{
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>8֜<EFBFBD>\<EFBFBD> <EFBFBD>̬<EFBFBD>\<EFBFBD><EFBFBD><EFBFBD>.
sprintf(acCommonBuffer, "%s\\%s", szFolderName, wfd.cFileName);
SearchFolderAndAddFile(acCommonBuffer);
}
}
else
{
if (_stricmp(wfd.cFileName, "Thumbs.db"))
{
// <EFBFBD>|Dž<EFBFBD> p<EFBFBD>i<EFBFBD>
sprintf(acCommonBuffer, "%s\\%s", szFolderName, wfd.cFileName);
// <EFBFBD>|<EFBFBD> l<EFBFBD>0<EFBFBD><EFBFBD> 0t<EFBFBD> D<EFBFBD>̲ <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̹ <EFBFBD><EFBFBD><EFBFBD>\<EFBFBD><EFBFBD><EFBFBD>. <EFBFBD>|<EFBFBD>l<EFBFBD>0<EFBFBD> 0@<EFBFBD> X<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŕ<EFBFBD> <EFBFBD>|<EFBFBD>t<EFBFBD><EFBFBD><EFBFBD>.
HANDLE hFile = CreateFile(acCommonBuffer, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (GetFileSize(hFile, NULL) != 0)
{
AddFileInfo add;
add.FileName = acCommonBuffer;
add.FilePath = strSubFolder;
g_AddFileList.push_back(add);
}
CloseHandle(hFile);
}
}
bResult = FindNextFile(hSearchFile, &wfd);
}
FindClose(hSearchFile);
}
void CNxFileSystemToolDlg::OnNewFolder()
{
// TODO: <EFBFBD><EFBFBD>0<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>9<EFBFBD> <EFBFBD>̬<EFBFBD>0<EFBFBD> T<EFBFBD>ܴ|<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>i<EFBFBD>Ȳ<EFBFBD><EFBFBD>.
if ( m_bWorking )
{
AfxMessageBox(_T("D<><44><EFBFBD> <00><><EFBFBD><EFBFBD>t<EFBFBD> <00>ɉ<EFBFBD>Ʌ<>Ȳ<EFBFBD><C8B2>."));
return;
}
if(!m_FileList.GetItemCount())
{
AfxMessageBox(_T(" <0C>|<7C><>¤<EFBFBD>\<EFBFBD>t<EFBFBD> <00><>1<EFBFBD><18><><EFBFBD> <00><><EFBFBD><EFBFBD> <4A>Ȳ<EFBFBD><C8B2>."));
return;
}
CNewFolderDlg Dlg;
if(Dlg.DoModal() == IDCANCEL) return;
if(Dlg.m_strFolderName.IsEmpty()) return;
// g_FileSystem.AddDirWithChange(LPCTSTR(Dlg.m_strFolderName));
UpdateFileList();
}
void
CNxFileSystemToolDlg::OnRemove()
{
if ( m_bWorking )
{
AfxMessageBox(_T("D<><44><EFBFBD> <00><><EFBFBD><EFBFBD>t<EFBFBD> <00>ɉ<EFBFBD>Ʌ<>Ȳ<EFBFBD><C8B2>."));
return;
}
if(!m_FileList.GetItemCount())
{
AfxMessageBox(_T(" <0C>|<7C><>¤<EFBFBD>\<EFBFBD>t<EFBFBD> <00><>1<EFBFBD><18><><EFBFBD> <00><><EFBFBD><EFBFBD> <4A>Ȳ<EFBFBD><C8B2>."));
return;
}
if(!m_FileList.GetSelectedCount()) return;
if(AfxMessageBox(_T(" <20><><EFBFBD><1C> <0C>|<7C> 9<>@<40> <00><>T<EFBFBD>|<7C> <00><><1C>X<EFBFBD><58> <EFBFBD><C2A0><EFBFBD>ȲL<C8B2>?"), MB_YESNO) == IDYES)
{
CStringArray strRemove;
POSITION Pos = m_FileList.GetFirstSelectedItemPosition();
while(Pos)
{
int iItem = m_FileList.GetNextSelectedItem(Pos);
SNxFileInfo* NxFileInfo = (SNxFileInfo*)m_FileList.GetItemData(iItem);
strRemove.Add(NxFileInfo->szFileName);
}
for(int i=0;i<strRemove.GetSize();i++) g_FileSystem.Remove(strRemove[i]);
UpdateFileList();
}
}
void
CNxFileSystemToolDlg::OnNMDblclkFileList(NMHDR *pNMHDR, LRESULT *pResult)
{
if ( m_bWorking )
{
AfxMessageBox(_T("D<><44><EFBFBD> <00><><EFBFBD><EFBFBD>t<EFBFBD> <00>ɉ<EFBFBD>Ʌ<>Ȳ<EFBFBD><C8B2>."));
return;
}
if(m_FileList.GetSelectedCount() != 1) return;
NMITEMACTIVATE* pNMItemActivate = (NMITEMACTIVATE*)pNMHDR;
if(pNMItemActivate->iItem >= 0)
{
SNxFileInfo *pFH = ( SNxFileInfo * )m_FileList.GetItemData(pNMItemActivate->iItem);
if( pFH->nFileType == NFS_DIR)
{
g_FileSystem.ChangeDir(pFH->szFileName);
UpdateFileList();
}
}
*pResult = 0;
}
void
CNxFileSystemToolDlg::OnLvnEndlabeleditFileList(NMHDR *pNMHDR, LRESULT *pResult)
{
if ( m_bWorking )
{
AfxMessageBox(_T("D<><44><EFBFBD> <00><><EFBFBD><EFBFBD>t<EFBFBD> <00>ɉ<EFBFBD>Ʌ<>Ȳ<EFBFBD><C8B2>."));
return;
}
NMLVDISPINFO *pDispInfo = reinterpret_cast<NMLVDISPINFO*>(pNMHDR);
if(!pDispInfo->item.pszText) return;
SNxFileInfo *pFH = ( SNxFileInfo * )m_FileList.GetItemData(pDispInfo->item.iItem);
if(!g_FileSystem.Rename(pFH->szFileName,pDispInfo->item.pszText))
{
AfxMessageBox(_T(" <20><><EFBFBD><1C> <0C>|<7C> 9<>@<40> <00><>T<EFBFBD>X<EFBFBD> <74>D<EFBFBD> <00><><EFBFBD><EFBFBD>`<60><18> <00>ŵ<EFBFBD>Ȳ<EFBFBD><C8B2>!"));
return;
}
m_FileList.SetItemText(pDispInfo->item.iItem,0,pDispInfo->item.pszText);
*pResult = 0;
}
void
CNxFileSystemToolDlg::DropFile(HDROP hDrop)
{
if ( m_bWorking )
{
AfxMessageBox(_T("D<><44><EFBFBD> <00><><EFBFBD><EFBFBD>t<EFBFBD> <00>ɉ<EFBFBD>Ʌ<>Ȳ<EFBFBD><C8B2>."));
return;
}
g_AddFileList.clear();
if(!m_FileList.GetItemCount())
{
AfxMessageBox(_T(" <0C>|<7C><>¤<EFBFBD>\<EFBFBD>t<EFBFBD> <00><>1<EFBFBD><18><><EFBFBD> <00><><EFBFBD><EFBFBD> <4A>Ȳ<EFBFBD><C8B2>."));
return;
}
if ( AfxMessageBox(_T("ܴ<><DCB4><EFBFBD><EFBFBD>\<EFBFBD> <0C>|<7C><0F> <00><>T<EFBFBD>|<7C> <0C>|<7C><>¤<EFBFBD>\<EFBFBD><EFBFBD><EFBFBD> ȥ<>X<EFBFBD><58> <EFBFBD><C2A0><EFBFBD>ȲL<C8B2>?") , MB_YESNO) == IDNO )
return;
// <EFBFBD> <EFBFBD><EFBFBD><EFBFBD>.. D<EFBFBD><EFBFBD><EFBFBD>0<EFBFBD>..
DrawWorking();
/*
UINT DragQueryFile( HDROP hDrop, UINT iFile, LPTSTR lpszFile, UINT cch );
iFileX<EFBFBD> <EFBFBD>t<EFBFBD> 0xFFFFFFFF|<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŕ<EFBFBD> <EFBFBD><EFBFBD>4<EFBFBD><EFBFBD><<EFBFBD>\<EFBFBD> <EFBFBD><EFBFBD> <EFBFBD>X<EFBFBD> <EFBFBD>|<EFBFBD>t<EFBFBD> ܴm<EFBFBD><EFBFBD><EFBFBD>Ŕ<EFBFBD><EFBFBD><EFBFBD>|<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><<EFBFBD>\<EFBFBD> <EFBFBD>X<EFBFBD>
<EFBFBD>, iFile<EFBFBD>t<EFBFBD> 0<EFBFBD><EFBFBD> ܴm<EFBFBD><EFBFBD> ȴ<EFBFBD> <EFBFBD>|<EFBFBD>¬<EFBFBD>t<EFBFBD>X<EFBFBD> <EFBFBD>t<EFBFBD><EFBFBD><EFBFBD>, lpszFilet<EFBFBD> NULLx<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŕ<EFBFBD> nullD<EFBFBD> <EFBFBD><EFBFBD>h<EFBFBD>X<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD> <EFBFBD>\<EFBFBD> <EFBFBD>έ<EFBFBD>0<EFBFBD> l<EFBFBD>0<EFBFBD>|<EFBFBD> <EFBFBD><EFBFBD>4<EFBFBD>
hDrop : ܴm<EFBFBD> <EFBFBD>|<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
iFile : <EFBFBD>|<EFBFBD> <EFBFBD>Ϭ<EFBFBD><EFBFBD><EFBFBD> <EFBFBD>\<EFBFBD> x<EFBFBD>q<EFBFBD><EFBFBD><EFBFBD>|<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>д<EFBFBD>p<EFBFBD>, t<EFBFBD> <EFBFBD><EFBFBD><EFBFBD> X<EFBFBD>t<EFBFBD> <EFBFBD>\<EFBFBD> <EFBFBD>Ϭ<EFBFBD><EFBFBD> <EFBFBD><EFBFBD>i<EFBFBD>Ȳ<EFBFBD><EFBFBD>.
lpszFile : (Ӥ…<EFBFBD>D<EFBFBD> <EFBFBD>D<EFBFBD>ܴ<EFBFBD><EFBFBD> <EFBFBD><EFBFBD>|<EFBFBD>(<EFBFBD>¸<EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
cch : <EFBFBD><EFBFBD>|<EFBFBD>X<EFBFBD> l<EFBFBD>0<EFBFBD>
*/
int iCount = DragQueryFile(hDrop,0xFFFFFFFF,NULL,0); // <EFBFBD>|<EFBFBD>X<EFBFBD> /<EFBFBD><EFBFBD>|<EFBFBD> l<EFBFBD>\<EFBFBD><EFBFBD><EFBFBD>.
TCHAR strPath[_MAX_PATH];
for(int i=0;i<iCount;i++)
{
DragQueryFile(hDrop,i,strPath,_MAX_PATH);
FILE* bFile = _tfopen(strPath, _T("rb")); // <EFBFBD>|<EFBFBD>t<EFBFBD> D<EFBFBD>Ȳt<EFBFBD> bFile t<EFBFBD> NULL <EFBFBD><EFBFBD><EFBFBD>t<EFBFBD><EFBFBD><EFBFBD>
if(bFile) // <EFBFBD><EFBFBD>, <EFBFBD>|<EFBFBD>t<EFBFBD>t<EFBFBD> |<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>!
fclose(bFile);
TCHAR strName[_MAX_FNAME];
g_FileSystem.GetNameOnly(strName,strPath); // <EFBFBD><EFBFBD>\<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> |<EFBFBD><EFBFBD><EFBFBD> <EFBFBD>|<EFBFBD><EFBFBD>̹ <EFBFBD>ŴŸ<EFBFBD><EFBFBD><EFBFBD>.
if(bFile)
{
// <EFBFBD>@<EFBFBD> <EFBFBD>X<EFBFBD> <EFBFBD>|<EFBFBD>t<EFBFBD> <EFBFBD>`ս<EFBFBD><EFBFBD><EFBFBD>..
/* if(g_FileSystem.CheckNameExist(strName))
{
if(m_iOverwriteType < 0)
m_iOverwriteType = AfxMessageBox(_T("ٳ|<7C>\<EFBFBD> <74>X<EFBFBD> <0C>|<7C>t<EFBFBD> t<><74><EFBFBD> <74>i<EFBFBD>Ȳ<EFBFBD><C8B2>.\n\n <00><><EFBFBD><EFBFBD> <0C>|<7C>D<EFBFBD> <00><>\<EFBFBD><EFBFBD><EFBFBD> <0C>|<7C>\<EFBFBD> n<><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>$<24>t<EFBFBD> '<08>' |<7C>\n\n <00><><EFBFBD><EFBFBD> 0<>t<EFBFBD>X<EFBFBD> <0C>|<7C>D<EFBFBD> <00><>t<EFBFBD>X<EFBFBD><58><EFBFBD>$<24>t<EFBFBD> 'D<>Ȳ$<24>' |<7C> <0C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>$<24>!") ,MB_YESNO);
if(m_iOverwriteType == IDNO)
continue;
g_FileSystem.Remove(strName);
}*/
// <EFBFBD>|<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>..
AddFileInfo add;
add.FileName = strPath;
add.FilePath = g_FileSystem.GetCurDir();
g_AddFileList.push_back(add);
}
else
{
if(!DropFolder(strPath))
{
CString strError;
strError.Format(_T("<00><>T<EFBFBD>|<7C> <00><><00><58>p<EFBFBD> <00><>(<28>X<EFBFBD>Ƶ<>Ȳ<EFBFBD><C8B2>.\n\n%s"),strPath);
AfxMessageBox(strError);
}
}
}
m_iOverwriteType = -1;
DragFinish(hDrop);
// <EFBFBD>|<EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>‘<EFBFBD>!
g_pAddThread = new CFileImportThread(this->GetSafeHwnd());
g_pAddThread->Start();
m_bWorking = true;
}
BOOL
CNxFileSystemToolDlg::DropFolder(const TCHAR* strPath)
{
if ( m_bWorking )
{
AfxMessageBox(_T("D<><44><EFBFBD> <00><><EFBFBD><EFBFBD>t<EFBFBD> <00>ɉ<EFBFBD>Ʌ<>Ȳ<EFBFBD><C8B2>."));
return FALSE;
}
char *pFindPtr = strstr( ( char * )strPath, ".svn" );
if( pFindPtr )
{
if( _stricmp( pFindPtr, ".svn" ) == 0 )
{
return FALSE;
}
}
TCHAR strOldPath[_MAX_PATH];
GetCurrentDirectory(_MAX_PATH,strOldPath); // ֬<EFBFBD> t<EFBFBD> <EFBFBD>\<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD> <EFBFBD>‰<EFBFBD><EFBFBD>x<EFBFBD> <EFBFBD> <EFBFBD><EFBFBD>Ѭ<EFBFBD>|<EFBFBD> L<EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
SetCurrentDirectory(strPath); // ܴm<EFBFBD>`<EFBFBD> <EFBFBD><EFBFBD>T<EFBFBD>\<EFBFBD> t<EFBFBD>ٳ.??
TCHAR strName[_MAX_FNAME];
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(strN == "." || strN == "..") continue;
if(FileFind.IsDirectory())
{
DropFolder(LPCTSTR(strP));
}
else
{
/* if(g_FileSystem.CheckNameExist(strN))
{
if(m_iOverwriteType < 0)
m_iOverwriteType = AfxMessageBox(_T("ٳ|<7C>\<EFBFBD> <74>X<EFBFBD> <0C>|<7C>t<EFBFBD> t<><74><EFBFBD> <74>i<EFBFBD>Ȳ<EFBFBD><C8B2>.\n\n<00><><EFBFBD><EFBFBD> <0C>|<7C>D<EFBFBD> <00><>\<EFBFBD><EFBFBD><EFBFBD> <0C>|<7C>\<EFBFBD> n<><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>$<24>t<EFBFBD> '<08>' |<7C>\n\n<00><><EFBFBD><EFBFBD> 0<>t<EFBFBD>X<EFBFBD> <0C>|<7C>D<EFBFBD> <00><>t<EFBFBD>X<EFBFBD><58><EFBFBD>$<24>t<EFBFBD> 'D<>Ȳ$<24>' |<7C> <0C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>$<24>!"),MB_YESNO);
if(m_iOverwriteType == IDNO)
continue;
g_FileSystem.Remove(strN);
}*/
// <EFBFBD>|<EFBFBD> <EFBFBD><EFBFBD><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
CNxFileSystemToolDlg::OnIpacExit()
{
// TODO: <EFBFBD><EFBFBD>0<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>9<EFBFBD> <EFBFBD>̬<EFBFBD>0<EFBFBD> T<EFBFBD>ܴ|<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>i<EFBFBD>Ȳ<EFBFBD><EFBFBD>.
if ( m_bWorking )
{
AfxMessageBox(_T("D<><44><EFBFBD> <00><><EFBFBD><EFBFBD>t<EFBFBD> <00>ɉ<EFBFBD>Ʌ<>Ȳ<EFBFBD><C8B2>.\n\np<><08>̹ 0<><30><EFBFBD>$<24><><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD> H<> <20>L<EFBFBD><4C><EFBFBD>..? \n\nQ<>Q<EFBFBD>..."));
return;
}
PostQuitMessage(0);
}
void
CNxFileSystemToolDlg::OnOptimize()
{
// TODO: <EFBFBD><EFBFBD>0<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>9<EFBFBD> <EFBFBD>̬<EFBFBD>0<EFBFBD> T<EFBFBD>ܴ|<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>i<EFBFBD>Ȳ<EFBFBD><EFBFBD>.
if ( m_bWorking )
{
AfxMessageBox(_T("D<><44><EFBFBD> <00><><EFBFBD><EFBFBD>t<EFBFBD> <00>ɉ<EFBFBD>Ʌ<>Ȳ<EFBFBD><C8B2>.\n\np<><08>̹ 0<><30><EFBFBD>$<24><><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD> H<> <20>L<EFBFBD><4C><EFBFBD>..? \n\nQ<>Q<EFBFBD>..."));
return;
}
if(!m_FileList.GetItemCount())
{
AfxMessageBox(_T(" <0C>|<7C><>¤<EFBFBD>\<EFBFBD>t<EFBFBD> <00><>1<EFBFBD><18><><EFBFBD> <00><><EFBFBD><EFBFBD> <4A>Ȳ<EFBFBD><C8B2>."));
return;
}
// <EFBFBD> <EFBFBD><EFBFBD><EFBFBD>.. D<EFBFBD><EFBFBD><EFBFBD>0<EFBFBD>..
DrawWorking();
// <EFBFBD>|<EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>‘<EFBFBD>!
g_pOptimizeThread = new COptimizeThread(this->GetSafeHwnd() , m_strPath);
//OptimizeThread->Start();
g_pOptimizeThread->Run();
m_bWorking = true;
}
LRESULT
CNxFileSystemToolDlg::OnComplete_Optimize(WPARAM wParam, LPARAM lParam)
{
SAFE_DELETE (g_pOptimizeThread);
g_FileSystem.ChangeDir(_T("/"));
m_bWorking = false;
::PostMessage(g_pWorking->GetSafeHwnd(),WM_DESTROY,0,0);
SAFE_DELETE(g_pWorking);
AfxMessageBox(_T("\<EFBFBD><01>T<EFBFBD> <00><><EFBFBD><EFBFBD>D<EFBFBD> 1<><31><EFBFBD><EFBFBD>յ<EFBFBD>Ȳ<EFBFBD><C8B2>.\n\n<>0<EFBFBD><30><EFBFBD>7<EFBFBD><37><EFBFBD>~"));
UpdateFileList();
return TRUE;
}
LRESULT
CNxFileSystemToolDlg::OnComplete_Export(WPARAM wParam, LPARAM lParam)
{
SAFE_DELETE (g_pExportThread);
::PostMessage(g_pWorking->GetSafeHwnd(),WM_DESTROY,0,0);
SAFE_DELETE(g_pWorking);
AfxMessageBox(_T(" <0C>|<7C> <00>͜<EFBFBD> <00><><EFBFBD><EFBFBD>t<EFBFBD> D<≯ <18><>ŵ<EFBFBD>Ȳ<EFBFBD><C8B2>."));
UpdateFileList();
m_bWorking = false;
return TRUE;
}
void
CNxFileSystemToolDlg::OnRename()
{
;
}
using namespace std;
typedef list<SNxFileInfo> CValueFileHandleList;
typedef list<SNxFileInfo>::iterator CValueFileHandleList_It;
void
CNxFileSystemToolDlg::OnExport()
{
// TODO: <EFBFBD><EFBFBD>0<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>9<EFBFBD> <EFBFBD>̬<EFBFBD>0<EFBFBD> T<EFBFBD>ܴ|<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>i<EFBFBD>Ȳ<EFBFBD><EFBFBD>.
if ( m_bWorking )
{
AfxMessageBox(_T("D<><44><EFBFBD> <00><><EFBFBD><EFBFBD>t<EFBFBD> <00>ɉ<EFBFBD>Ʌ<>Ȳ<EFBFBD><C8B2>."));
return;
}
if(!m_FileList.GetItemCount())
{
AfxMessageBox(_T(" <0C>|<7C><>¤<EFBFBD>\<EFBFBD>t<EFBFBD> <00><>1<EFBFBD><18><><EFBFBD> <00><><EFBFBD><EFBFBD> <4A>Ȳ<EFBFBD><C8B2>."));
return;
}
if(!m_FileList.GetSelectedCount())
return;
if ( AfxMessageBox(_T(" <20><><EFBFBD><1C> <0C>|<7C> 9<>@<40> <00><>T<EFBFBD>|<7C> <78>\<EFBFBD> <00>͜<EFBFBD>X<EFBFBD><58> <EFBFBD><C2A0><EFBFBD>ȲL<C8B2>?"), MB_YESNO) == IDNO)
return;
TCHAR strOldPath[_MAX_PATH]= { 0 , };
// GetCurrentDirectory(_MAX_PATH,strOldPath); // ֬<EFBFBD> <EFBFBD> <EFBFBD><EFBFBD>Ѭ<EFBFBD>|<EFBFBD> L<EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
if ( ExportBrowseFolder(GetSafeHwnd(),strOldPath) == FALSE )
return;
CString CurPath;
CString ExportPath;
CurPath = strOldPath;
ExportPath = CurPath + _T("\\Exports");
// <EFBFBD><EFBFBD><EFBFBD>\<EFBFBD> <EFBFBD><EFBFBD>\<EFBFBD> + Exports <EFBFBD><EFBFBD>T<EFBFBD> ̹<EFBFBD><EFBFBD>0<EFBFBD>
CreateDirectory(ExportPath,NULL);
// <EFBFBD><EFBFBD>Ӹ<EFBFBD> `<EFBFBD> <EFBFBD><EFBFBD>T<EFBFBD>\<EFBFBD> t<EFBFBD>ٳ
SetCurrentDirectory(ExportPath);
// <EFBFBD> <EFBFBD><EFBFBD><EFBFBD>.. D<EFBFBD><EFBFBD><EFBFBD>0<EFBFBD>..
DrawWorking();
g_ExportList.clear();
POSITION Pos = m_FileList.GetFirstSelectedItemPosition();
CValueFileHandleList OriginalValue;
while(Pos)
{
int iItem = m_FileList.GetNextSelectedItem(Pos);
SNxFileInfo *pFH = ( SNxFileInfo * )m_FileList.GetItemData(iItem);
if( *(pFH->szFileName) == _T('.') )
continue;
SNxFileInfo FH = *pFH; // Value Copy
OriginalValue.push_back(FH);
}
CValueFileHandleList_It tempit=OriginalValue.begin();
for(tempit ; tempit!=OriginalValue.end() ; ++tempit )
{
SNxFileInfo FH = (SNxFileInfo)(*tempit);
ExportInfo add;
add.FileType = FH.nFileType;
add.Name = FH.szFileName;
add.FilePath = g_FileSystem.GetCurDir();
g_ExportList.push_back(add);
if ( FH.nFileType == NFS_DIR )
{
tstring name = FH.szFileName;
FolderExport(name);
g_FileSystem.ChangeDir(_T(".."));
}
}
// <EFBFBD>|<EFBFBD> \<EFBFBD><EFBFBD><EFBFBD>|<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>~
ExportInfoList_It Export_It = g_ExportList.begin();
//@Log.LogInfo(L"###### <00>Ѕ<EFBFBD> 0 <00><>t<EFBFBD>t<EFBFBD> <00><>T<EFBFBD> 1<00><>t<EFBFBD>t<EFBFBD> <0C>|<7C> ######");
for (Export_It ; Export_It != g_ExportList.end() ; ++Export_It )
{
tstring name = (*Export_It).Name;
tstring FilePath = (*Export_It).FilePath;
int FileType = (*Export_It).FileType;
//@Log.LogInfo(L"<74>:[%s] , <00><>\<EFBFBD>:[%s] , <0C>|<7C><>Ѕ<EFBFBD>: [%d] ",name.c_str(),FilePath.c_str(),FileType);
}
// <EFBFBD><EFBFBD>]<EFBFBD>D<EFBFBD> <EFBFBD><EFBFBD> Q<EFBFBD>X<EFBFBD><<EFBFBD>Ȳ <EFBFBD><EFBFBD><EFBFBD>ܴ|<EFBFBD> <EFBFBD>‘<EFBFBD>t<EFBFBD><EFBFBD><EFBFBD>L<EFBFBD>!!
g_pExportThread = new CFileExportThread(this->GetSafeHwnd() , ExportPath);
g_pExportThread->Start();
m_bWorking = true;
OriginalValue.clear();
}
void CNxFileSystemToolDlg::FolderExport(tstring FolderName)
{
if ( g_FileSystem.ChangeDir(FolderName.c_str()) == FALSE)
{
return;
}
std::vector< SPackingFileInfo * > vecFileInfo;
std::vector< std::string > vecDirList;
g_FileSystem.GetDirListCurDir( vecDirList );
g_FileSystem.GetFileInfoListCurDir( vecFileInfo );
int i;
for( i = 0; i < ( int )vecFileInfo.size(); i++ )
{
if( vecFileInfo[ i ]->dwCompressSize > 0 )
{
ExportInfo add;
add.FileType = NFS_FILE;
add.Name = vecFileInfo[ i ]->szFileName;
add.FilePath = g_FileSystem.GetCurDir();
g_ExportList.push_back(add);
}
}
for( i = 0; i < ( int )vecDirList.size(); i++ )
{
if( _stricmp( vecDirList[ i ].c_str(), "." ) == 0 )
{
continue;
}
if( _stricmp( vecDirList[ i ].c_str(), ".." ) == 0 )
{
continue;
}
FolderExport( vecDirList[ i ].c_str() );
}
g_FileSystem.ChangeDir( ".." );
}
void
CNxFileSystemToolDlg::OnAbout()
{
// TODO: <EFBFBD><EFBFBD>0<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>9<EFBFBD> <EFBFBD>̬<EFBFBD>0<EFBFBD> T<EFBFBD>ܴ|<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>i<EFBFBD>Ȳ<EFBFBD><EFBFBD>.
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
void
CNxFileSystemToolDlg::OnBnClickedButton1()
{
// TODO: <EFBFBD><EFBFBD>0<EFBFBD><EFBFBD><EFBFBD> <EFBFBD>θ<EFBFBD>d<EFBFBD> <EFBFBD> <EFBFBD>̬<EFBFBD>0<EFBFBD> T<EFBFBD>ܴ|<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>i<EFBFBD>Ȳ<EFBFBD><EFBFBD>.
CString Path;
this->GetDlgItemText(IDC_NAVI,Path);
if( g_FileSystem.ChangeDir((LPTSTR)(LPCTSTR)Path) )
{
UpdateFileList();
}
}
void CNxFileSystemToolDlg::OnMenuDivPacking()
{
// TODO: Add your command handler code here
BuildDivisionPacking dlg;
dlg.DoModal();
}
void CNxFileSystemToolDlg::OnMenuDivPackingCapacity()
{
// TODO: Add your command handler code here
BuildDivisionPackingCapacity dlg;
dlg.DoModal();
}
void CNxFileSystemToolDlg::OnPatch()
{
// TODO: Add your command handler code here
if(!m_FileList.GetItemCount())
{
AfxMessageBox(_T(" <0C>|<7C><>¤<EFBFBD>\<EFBFBD>t<EFBFBD> <00><>1<EFBFBD><18><><EFBFBD> <00><><EFBFBD><EFBFBD> <4A>Ȳ<EFBFBD><C8B2>.\n<00><><EFBFBD><EFBFBD><> <0C>|<7C>D<EFBFBD> \<EFBFBD>ܴt<EFBFBD><EFBFBD><EFBFBD>8<EFBFBD><EFBFBD><EFBFBD>."));
return;
}
CFileDialog Dlg(TRUE,_T(".pak"),NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,_T(" <0C>|<7C>(*.pak)|*.pak||"),NULL);
if(Dlg.DoModal() == IDCANCEL) return;
DrawWorking();
// <EFBFBD>|<EFBFBD> (<EFBFBD>X<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>ܴ <EFBFBD>‘<EFBFBD>!
g_pPatchThread = new PatchThread(this->GetSafeHwnd(), std::string(LPCTSTR(Dlg.GetPathName())));
g_pPatchThread->Start();
m_bWorking = true;
}
LRESULT CNxFileSystemToolDlg::OnCompletePatch(WPARAM wParam, LPARAM lParam)
{
m_bWorking = false;
SAFE_DELETE(g_pPatchThread);
//AfxMessageBox(_T("(<28>X<EFBFBD> D<≯!!"));
if ( g_pWorking )
{
::PostMessage(g_pWorking->GetSafeHwnd(),WM_DESTROY,0,0);
SAFE_DELETE(g_pWorking);
}
g_FileSystem.ChangeDir(_T("/"));
UpdateFileList();
return 0;
}
void CNxFileSystemToolDlg::OnCompare()
{
char szFileList[ 10000 ];
TCHAR szFilter[] = _T( "DragonNest Packing File (*.pak)|*.pak|All Files (*.*)|*.*||" );
CFileDialog FileDlg( TRUE, _T("pak"), _T("*.pak"), OFN_HIDEREADONLY | OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_ALLOWMULTISELECT | OFN_ENABLESIZING , szFilter, this );
memset( szFileList, 0, 10000 );
FileDlg.GetOFN().lpstrFile = szFileList;
FileDlg.GetOFN().nMaxFile = 10000;
FileDlg.m_ofn.lpstrTitle = "Open Source File";
if( FileDlg.DoModal() != IDOK )
{
return;
}
std::vector< std::string > vecSour, vecDest;
POSITION Pos = FileDlg.GetStartPosition();
while( Pos )
{
CString szFileName = FileDlg.GetNextPathName( Pos );
vecSour.push_back( szFileName.GetBuffer() );
}
FileDlg.m_ofn.lpstrTitle = "Open Destination File";
if( FileDlg.DoModal() != IDOK )
{
return;
}
Pos = FileDlg.GetStartPosition();
while( Pos )
{
CString szFileName = FileDlg.GetNextPathName( Pos );
vecDest.push_back( szFileName.GetBuffer() );
}
std::vector< SPackingFileInfo > vecSourFileInfo, vecDestFileInfo;
int i, j;
for( i = 0; i < ( int )vecSour.size(); i++ )
{
CEtPackingFile FileSystem;
if( !FileSystem.OpenFileSystem( vecSour[ i ].c_str(), true ) )
{
continue;
}
int nFileCount = FileSystem.GetFileCount();
for( j = 0; j < nFileCount; j++ )
{
SPackingFileInfo *pFileInfo = FileSystem.GetFileInfo( j );
if( pFileInfo->dwCompressSize == 0 )
{
continue;
}
vecSourFileInfo.push_back( *pFileInfo );
}
FileSystem.CloseFileSystem();
}
for( i = 0; i < ( int )vecDest.size(); i++ )
{
CEtPackingFile FileSystem;
if( !FileSystem.OpenFileSystem( vecDest[ i ].c_str(), true ) )
{
continue;
}
int nFileCount = FileSystem.GetFileCount();
for( j = 0; j < nFileCount; j++ )
{
SPackingFileInfo *pFileInfo = FileSystem.GetFileInfo( j );
if( pFileInfo->dwCompressSize == 0 )
{
continue;
}
vecDestFileInfo.push_back( *pFileInfo );
}
FileSystem.CloseFileSystem();
}
std::vector< char > vecCheckField;
std::vector< SPackingFileInfo > vecSourExist, vecDestExist, vecDiff;
vecCheckField.resize( vecDestFileInfo.size() );
memset( &vecCheckField[ 0 ], 0, vecCheckField.size() );
for( i = 0; i < ( int )vecSourFileInfo.size(); i++ )
{
for( j = 0; j < ( int )vecDestFileInfo.size(); j++ )
{
if( _stricmp( vecSourFileInfo[ i ].szFileName, vecDestFileInfo[ j ].szFileName ) == 0 )
{
vecCheckField[ j ] = 1;
if( vecSourFileInfo[ i ].dwChecksum != vecDestFileInfo[ j ].dwChecksum )
{
vecDiff.push_back( vecSourFileInfo[ i ] );
}
break;
}
}
if( j == ( int )vecDestFileInfo.size() )
{
vecSourExist.push_back( vecSourFileInfo[ i ] );
}
}
for( i = 0; i < ( int )vecCheckField.size(); i++ )
{
if( vecCheckField[ i ] == 0 )
{
vecDestExist.push_back( vecDestFileInfo[ i ] );
}
}
if( vecDestExist.size() + vecSourExist.size() + vecDiff.size() == 0 )
{
MessageBox( "File Is Identical" );
return;
}
MessageBox( "File Is Different" );
return;
}