Files
SimpleRemoter/server/2015Remote/FileManagerDlg.cpp

1455 lines
39 KiB
C++
Raw Normal View History

// FileManagerDlg.cpp : ʵ<><CAB5><EFBFBD>ļ<EFBFBD>
//
#include "stdafx.h"
#include "2015Remote.h"
#include "FileManagerDlg.h"
#include "afxdialogex.h"
#include "EditDialog.h"
#include "FileTransferModeDlg.h"
#include "FileCompress.h"
#include <strsafe.h>
#define MAKEINT64(low, high) ((unsigned __int64)(((DWORD)(low)) | ((unsigned __int64)((DWORD)(high))) << 32))
#define MAX_SEND_BUFFER 8192
static UINT Indicators[] =
{
ID_SEPARATOR,
ID_SEPARATOR,
IDR_STATUSBAR_PROCESS,
};
// CFileManagerDlg <20>Ի<EFBFBD><D4BB><EFBFBD>
IMPLEMENT_DYNAMIC(CFileManagerDlg, CDialog)
CFileManagerDlg::CFileManagerDlg(CWnd* pParent, IOCPServer* IOCPServer, CONTEXT_OBJECT *ContextObject)
: CDialog(CFileManagerDlg::IDD, pParent)
{
m_ContextObject = ContextObject;
m_iocpServer = IOCPServer;
m_ProgressCtrl = NULL;
sockaddr_in ClientAddr = {0};
int iClientAddrLength = sizeof(sockaddr_in);
//<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>ӱ<EFBFBD><D3B1>ض˵<D8B6>IP
BOOL bOk = getpeername(ContextObject->sClientSocket,(SOCKADDR*)&ClientAddr, &iClientAddrLength);
m_strClientIP = bOk != INVALID_SOCKET ? inet_ntoa(ClientAddr.sin_addr) : "";
memset(m_szClientDiskDriverList, 0, sizeof(m_szClientDiskDriverList));
int len = ContextObject->InDeCompressedBuffer.GetBufferLength();
memcpy(m_szClientDiskDriverList, ContextObject->InDeCompressedBuffer.GetBuffer(1), len - 1);
CoInitialize(0);
// <20><><EFBFBD><EFBFBD>ϵͳͼ<CDB3><CDBC><EFBFBD>б<EFBFBD>
try {
SHFILEINFO sfi = {0};
HIMAGELIST hImageList = (HIMAGELIST)SHGetFileInfo(NULL,0,&sfi,sizeof(SHFILEINFO),SHGFI_LARGEICON | SHGFI_SYSICONINDEX);
m_ImageList_Large = CImageList::FromHandle(hImageList); //CimageList*
ImageList_Destroy(hImageList);
}catch(...){
OutputDebugStringA("======> m_ImageList_Large catch an error. \n");
}
try{
SHFILEINFO sfi = {0};
HIMAGELIST hImageList = (HIMAGELIST)SHGetFileInfo(NULL,0,&sfi,sizeof(SHFILEINFO),SHGFI_SMALLICON | SHGFI_SYSICONINDEX);
m_ImageList_Small = CImageList::FromHandle(hImageList);
ImageList_Destroy(hImageList);
}catch(...){
OutputDebugStringA("======> m_ImageList_Small catch an error. \n");
}
m_bDragging = FALSE;
m_bIsStop = FALSE;
}
CFileManagerDlg::~CFileManagerDlg()
{
m_Remote_Upload_Job.RemoveAll();
if (m_ProgressCtrl)
{
m_ProgressCtrl->DestroyWindow();
delete m_ProgressCtrl;
}
m_ProgressCtrl = NULL;
m_ImageList_Large->Detach();
m_ImageList_Small->Detach();
CoUninitialize();
}
void CFileManagerDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_LIST_CLIENT, m_ControlList_Client);
DDX_Control(pDX, IDC_LIST_SERVER, m_ControlList_Server);
DDX_Control(pDX, IDC_COMBO_SERVER, m_ComboBox_Server);
DDX_Control(pDX, IDC_COMBO_CLIENT, m_ComboBox_Client);
DDX_Control(pDX, IDC_STATIC_FILE_SERVER, m_FileServerBarPos);
DDX_Control(pDX, IDC_STATIC_FILE_CLIENT, m_FileClientBarPos);
}
BEGIN_MESSAGE_MAP(CFileManagerDlg, CDialog)
ON_WM_CLOSE()
ON_NOTIFY(NM_DBLCLK, IDC_LIST_SERVER, &CFileManagerDlg::OnNMDblclkListServer)
ON_CBN_SELCHANGE(IDC_COMBO_SERVER, &CFileManagerDlg::OnCbnSelchangeComboServer)
ON_COMMAND(IDT_SERVER_FILE_PREV, &CFileManagerDlg::OnIdtServerPrev)
ON_COMMAND(IDT_SERVER_FILE_NEW_FOLDER, &CFileManagerDlg::OnIdtServerNewFolder)
ON_COMMAND(IDT_SERVER_FILE_DELETE, &CFileManagerDlg::OnIdtServerDelete)
ON_COMMAND(IDT_SERVER_FILE_STOP, &CFileManagerDlg::OnIdtServerStop)
ON_COMMAND(ID_VIEW_BIG_ICON, &CFileManagerDlg::OnViewBigIcon)
ON_COMMAND(ID_VIEW_SMALL_ICON, &CFileManagerDlg::OnViewSmallIcon)
ON_COMMAND(ID_VIEW_DETAIL, &CFileManagerDlg::OnViewDetail)
ON_COMMAND(ID_VIEW_LIST, &CFileManagerDlg::OnViewList)
ON_NOTIFY(NM_DBLCLK, IDC_LIST_CLIENT, &CFileManagerDlg::OnNMDblclkListClient)
ON_NOTIFY(LVN_BEGINDRAG, IDC_LIST_SERVER, &CFileManagerDlg::OnLvnBegindragListServer)
ON_WM_MOUSEMOVE()
ON_WM_LBUTTONUP()
ON_NOTIFY(NM_RCLICK, IDC_LIST_SERVER, &CFileManagerDlg::OnNMRClickListServer)
ON_COMMAND(ID_OPERATION_SERVER_RUN, &CFileManagerDlg::OnOperationServerRun)
ON_COMMAND(ID_OPERATION_RENAME, &CFileManagerDlg::OnOperationRename)
ON_NOTIFY(LVN_ENDLABELEDIT, IDC_LIST_SERVER, &CFileManagerDlg::OnLvnEndlabeleditListServer)
ON_NOTIFY(NM_RCLICK, IDC_LIST_CLIENT, &CFileManagerDlg::OnNMRClickListClient)
ON_COMMAND(ID_OPERATION_CLIENT_SHOW_RUN, &CFileManagerDlg::OnOperationClientShowRun)
ON_COMMAND(ID_OPERATION_CLIENT_HIDE_RUN, &CFileManagerDlg::OnOperationClientHideRun)
ON_NOTIFY(LVN_ENDLABELEDIT, IDC_LIST_CLIENT, &CFileManagerDlg::OnLvnEndlabeleditListClient)
ON_COMMAND(ID_OPERATION_COMPRESS, &CFileManagerDlg::OnOperationCompress)
END_MESSAGE_MAP()
// CFileManagerDlg <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
VOID CFileManagerDlg::OnIdtServerPrev()
{
FixedServerFileList("..");
}
VOID CFileManagerDlg::OnIdtServerNewFolder()
{
if (m_Server_File_Path == "")
return;
CEditDialog Dlg(this);
if (Dlg.DoModal() == IDOK && Dlg.m_EditString.GetLength())
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼
CString strString;
strString = m_Server_File_Path + Dlg.m_EditString + "\\";
MakeSureDirectoryPathExists(strString.GetBuffer()); /*c:\Hello\ */
FixedServerFileList(".");
}
}
VOID CFileManagerDlg::OnIdtServerStop()
{
m_bIsStop = TRUE;
}
VOID CFileManagerDlg::OnIdtServerDelete() //<2F><><EFBFBD><EFBFBD>ɾ<EFBFBD><C9BE>Ŀ¼<C4BF><C2BC><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
{
// m_bIsUpload = true; //<2F><><EFBFBD>ǿ<EFBFBD><C7BF><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Flag<61><67><EFBFBD><EFBFBD>ֹͣ <20><>ǰ<EFBFBD>Ĺ<EFBFBD><C4B9><EFBFBD>
CString strString;
if (m_ControlList_Server.GetSelectedCount() > 1)
strString.Format("ȷ<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> %d <20><>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD>?", m_ControlList_Server.GetSelectedCount());
else
{
CString strFileName = m_ControlList_Server.GetItemText(m_ControlList_Server.GetSelectionMark(), 0);
int iItem = m_ControlList_Server.GetSelectionMark(); //.. fff 1 Hello
if (iItem==-1)
{
return;
}
if (m_ControlList_Server.GetItemData(iItem) == 1)
{
strString.Format("ȷʵҪɾ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD>С<EFBFBD>%s<><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD>?", strFileName);
}
else
{
strString.Format("ȷʵҪ<EFBFBD>ѡ<EFBFBD>%s<><73>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD>?", strFileName);
}
}
if (::MessageBox(m_hWnd, strString, "ȷ<EFBFBD><EFBFBD>ɾ<EFBFBD><EFBFBD>", MB_YESNO|MB_ICONQUESTION) == IDNO)
{
return;
}
EnableControl(FALSE);
POSITION Pos = m_ControlList_Server.GetFirstSelectedItemPosition();
while(Pos)
{
int iItem = m_ControlList_Server.GetNextSelectedItem(Pos);
CString strFileFullPath = m_Server_File_Path + m_ControlList_Server.GetItemText(iItem, 0);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼
if (m_ControlList_Server.GetItemData(iItem))
{
strFileFullPath += '\\';
DeleteDirectory(strFileFullPath);
}
else
{
DeleteFile(strFileFullPath);
}
}
// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
EnableControl(TRUE);
FixedServerFileList(".");
}
BOOL CFileManagerDlg::DeleteDirectory(LPCTSTR strDirectoryFullPath)
{
WIN32_FIND_DATA wfd;
char szBuffer[MAX_PATH] = {0};
wsprintf(szBuffer, "%s\\*.*", strDirectoryFullPath);
HANDLE hFind = FindFirstFile(szBuffer, &wfd);
if (hFind == INVALID_HANDLE_VALUE) // <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
return FALSE;
do
{
if (wfd.cFileName[0] != '.')
{
if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
char szv1[MAX_PATH];
wsprintf(szv1, "%s\\%s", strDirectoryFullPath, wfd.cFileName);
DeleteDirectory(szv1);
}
else
{
char szv2[MAX_PATH];
wsprintf(szv2, "%s\\%s", strDirectoryFullPath, wfd.cFileName);
DeleteFile(szv2);
}
}
} while (FindNextFile(hFind, &wfd));
FindClose(hFind); // <20>رղ<D8B1><D5B2>Ҿ<EFBFBD><D2BE><EFBFBD>
if(!RemoveDirectory(strDirectoryFullPath))
{
return FALSE;
}
return true;
}
BOOL CFileManagerDlg::MakeSureDirectoryPathExists(char* szDirectoryFullPath)
{
char* szTravel = NULL;
char* szBuffer = NULL;
DWORD dwAttributes;
__try
{
szBuffer = (char*)malloc(sizeof(char)*(strlen(szDirectoryFullPath) + 1));
if(szBuffer == NULL)
{
return FALSE;
}
strcpy(szBuffer, szDirectoryFullPath);
szTravel = szBuffer;
if (0)
{
}
else if(*(szTravel+1) == ':')
{
szTravel++;
szTravel++;
if(*szTravel && (*szTravel == '\\'))
{
szTravel++;
}
}
while(*szTravel) //\Hello\World\Shit\0
{
if(*szTravel == '\\')
{
*szTravel = '\0';
dwAttributes = GetFileAttributes(szBuffer); //<2F><EFBFBD>Ƿ<EFBFBD><C7B7>Ƿ<EFBFBD>Ŀ¼ Ŀ¼<C4BF><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(dwAttributes == 0xffffffff)
{
if(!CreateDirectory(szBuffer, NULL))
{
if(GetLastError() != ERROR_ALREADY_EXISTS)
{
free(szBuffer);
return FALSE;
}
}
}
else
{
if((dwAttributes & FILE_ATTRIBUTE_DIRECTORY) != FILE_ATTRIBUTE_DIRECTORY)
{
free(szBuffer);
szBuffer = NULL;
return FALSE;
}
}
*szTravel = '\\';
}
szTravel = CharNext(szTravel);
}
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
if (szBuffer!=NULL)
{
free(szBuffer);
szBuffer = NULL;
}
return FALSE;
}
if (szBuffer!=NULL)
{
free(szBuffer);
szBuffer = NULL;
}
return TRUE;
}
BOOL CFileManagerDlg::PreTranslateMessage(MSG* pMsg)
{
return CDialog::PreTranslateMessage(pMsg);
}
void CFileManagerDlg::OnClose()
{
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>ֵ
m_ContextObject->v1 = 0;
CancelIo((HANDLE)m_ContextObject->sClientSocket);
closesocket(m_ContextObject->sClientSocket);
CDialog::OnClose();
//delete this; // <20>ͷ<EFBFBD><CDB7>ڴ<EFBFBD><DAB4><EFBFBD>Ӧ<EFBFBD>õģ<C3B5><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD>2<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
}
BOOL CFileManagerDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CString strString;
strString.Format("%s - Զ<><D4B6><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>", m_strClientIP);
SetWindowText(strString);
if (!m_ToolBar_File_Server.Create(this, WS_CHILD |
WS_VISIBLE | CBRS_ALIGN_ANY | CBRS_TOOLTIPS | CBRS_FLYBY, IDR_TOOLBAR_FILE_SERVER)
||!m_ToolBar_File_Server.LoadToolBar(IDR_TOOLBAR_FILE_SERVER))
{
return -1;
}
// m_ToolBar_File_Server.ModifyStyle(0, TBSTYLE_FLAT); //Fix for WinXP
m_ToolBar_File_Server.LoadTrueColorToolBar
(
24, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD>
IDB_BITMAP_FILE,
IDB_BITMAP_FILE,
IDB_BITMAP_FILE //û<><C3BB><EFBFBD><EFBFBD>
);
m_ToolBar_File_Server.AddDropDownButton(this,IDT_SERVER_FILE_VIEW ,IDR_MENU_FILE_SERVER);
m_ToolBar_File_Server.SetButtonText(0,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"); //<2F><>λͼ<CEBB><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
m_ToolBar_File_Server.SetButtonText(1,"<EFBFBD>");
m_ToolBar_File_Server.SetButtonText(2,"ɾ<EFBFBD><EFBFBD>");
m_ToolBar_File_Server.SetButtonText(3,"<EFBFBD>½<EFBFBD>");
m_ToolBar_File_Server.SetButtonText(5,"ֹͣ");
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0); //<2F><>ʾ
RECT RectServer;
m_FileServerBarPos.GetWindowRect(&RectServer);
m_FileServerBarPos.ShowWindow(SW_HIDE);
//<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_ToolBar_File_Server.MoveWindow(&RectServer);
m_ControlList_Server.SetImageList(m_ImageList_Large, LVSIL_NORMAL);
m_ControlList_Server.SetImageList(m_ImageList_Small, LVSIL_SMALL);
m_ControlList_Client.SetImageList(m_ImageList_Large, LVSIL_NORMAL);
m_ControlList_Client.SetImageList(m_ImageList_Small, LVSIL_SMALL);
if (!m_StatusBar.Create(this) ||
!m_StatusBar.SetIndicators(Indicators,
sizeof(Indicators)/sizeof(UINT)))
{
return -1;
}
m_StatusBar.SetPaneInfo(0, m_StatusBar.GetItemID(0), SBPS_STRETCH, NULL);
m_StatusBar.SetPaneInfo(1, m_StatusBar.GetItemID(1), SBPS_NORMAL, 120);
m_StatusBar.SetPaneInfo(2, m_StatusBar.GetItemID(2), SBPS_NORMAL, 50);
RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0); //<2F><>ʾ״̬<D7B4><CCAC>
RECT ClientRect;
GetClientRect(&ClientRect);
CRect Rect;
Rect.top=ClientRect.bottom-25;
Rect.left=0;
Rect.right=ClientRect.right;
Rect.bottom=ClientRect.bottom;
m_StatusBar.MoveWindow(Rect);
m_StatusBar.GetItemRect(1, &ClientRect);
ClientRect.bottom -= 1;
m_ProgressCtrl = new CProgressCtrl;
m_ProgressCtrl->Create(PBS_SMOOTH | WS_VISIBLE, ClientRect, &m_StatusBar, 1);
m_ProgressCtrl->SetRange(0, 100); //<2F><><EFBFBD>ý<EFBFBD><C3BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ
m_ProgressCtrl->SetPos(0); //<2F><><EFBFBD>ý<EFBFBD><C3BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰλ<C7B0><CEBB>
FixedServerDiskDriverList();
FixedClientDiskDriverList();
return TRUE; // return TRUE unless you set the focus to a control
// <20>쳣: OCX <20><><EFBFBD><EFBFBD>ҳӦ<D2B3><D3A6><EFBFBD><EFBFBD> FALSE
}
VOID CFileManagerDlg::FixedServerDiskDriverList()
{
CHAR *Travel = NULL;
m_ControlList_Server.DeleteAllItems();
while(m_ControlList_Server.DeleteColumn(0) != 0);
//<2F><>ʼ<EFBFBD><CABC><EFBFBD>б<EFBFBD><D0B1><EFBFBD>Ϣ
m_ControlList_Server.InsertColumn(0, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", LVCFMT_LEFT, 70);
m_ControlList_Server.InsertColumn(1, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", LVCFMT_RIGHT, 85);
m_ControlList_Server.InsertColumn(2, "<EFBFBD>ܴ<EFBFBD>С", LVCFMT_RIGHT, 80);
m_ControlList_Server.InsertColumn(3, "<EFBFBD><EFBFBD><EFBFBD>ÿռ<EFBFBD>", LVCFMT_RIGHT, 90);
m_ControlList_Server.SetExtendedStyle(LVS_EX_FULLROWSELECT);
GetLogicalDriveStrings(sizeof(m_szServerDiskDriverList),(LPSTR)m_szServerDiskDriverList); //c:\.d:\.
Travel = m_szServerDiskDriverList;
CHAR szFileSystem[MAX_PATH]; //ntfs fat32
unsigned __int64 ulHardDiskAmount = 0; //HardDisk
unsigned __int64 ulHardDiskFreeSpace = 0;
unsigned long ulHardDiskAmountMB = 0; // <20>ܴ<EFBFBD>С
unsigned long ulHardDiskFreeMB = 0; // ʣ<><CAA3><EFBFBD>ռ<EFBFBD>
for (int i = 0; *Travel != '\0'; i++, Travel += lstrlen(Travel) + 1)
{
// <20>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
memset(szFileSystem, 0, sizeof(szFileSystem));
// <20>õ<EFBFBD><C3B5>ļ<EFBFBD>ϵͳ<CFB5><CDB3>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>С
GetVolumeInformation(Travel, NULL, 0, NULL, NULL, NULL, szFileSystem, MAX_PATH);
ULONG ulFileSystemLength = lstrlen(szFileSystem) + 1;
if (GetDiskFreeSpaceEx(Travel, (PULARGE_INTEGER)&ulHardDiskFreeSpace, (PULARGE_INTEGER)&ulHardDiskAmount, NULL))
{
ulHardDiskAmountMB = ulHardDiskAmount / 1024 / 1024;
ulHardDiskFreeMB = ulHardDiskFreeSpace / 1024 / 1024;
}
else
{
ulHardDiskAmountMB = 0;
ulHardDiskFreeMB = 0;
}
int iItem = m_ControlList_Server.InsertItem(i, Travel,GetServerIconIndex(Travel,GetFileAttributes(Travel))); //<2F><><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3>ͼ<EFBFBD><CDBC>
m_ControlList_Server.SetItemData(iItem, 1);
SHFILEINFO sfi;
SHGetFileInfo(Travel, FILE_ATTRIBUTE_NORMAL, &sfi,sizeof(SHFILEINFO), SHGFI_TYPENAME | SHGFI_USEFILEATTRIBUTES);
m_ControlList_Server.SetItemText(iItem, 1, sfi.szTypeName);
CString strCount;
strCount.Format("%10.1f GB", (float)ulHardDiskAmountMB / 1024);
m_ControlList_Server.SetItemText(iItem, 2, strCount);
strCount.Format("%10.1f GB", (float)ulHardDiskFreeMB / 1024);
m_ControlList_Server.SetItemText(iItem, 3, strCount);
}
}
VOID CFileManagerDlg::FixedClientDiskDriverList()
{
m_ControlList_Client.DeleteAllItems();
m_ControlList_Client.InsertColumn(0, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", LVCFMT_LEFT, 70);
m_ControlList_Client.InsertColumn(1, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", LVCFMT_RIGHT, 85);
m_ControlList_Client.InsertColumn(2, "<EFBFBD>ܴ<EFBFBD>С", LVCFMT_RIGHT, 80);
m_ControlList_Client.InsertColumn(3, "<EFBFBD><EFBFBD><EFBFBD>ÿռ<EFBFBD>", LVCFMT_RIGHT, 90);
m_ControlList_Client.SetExtendedStyle(LVS_EX_FULLROWSELECT);
char *Travel = NULL;
Travel = (char *)m_szClientDiskDriverList; //<2F>Ѿ<EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣͷ<CFA2><CDB7>1<EFBFBD><31><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
int i = 0;
ULONG ulIconIndex = 0;
for (i = 0; Travel[i] != '\0';)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (Travel[i] == 'A' || Travel[i] == 'B')
{
ulIconIndex = 6;
}
else
{
switch (Travel[i + 1]) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E9BFB4><EFBFBD>ض<EFBFBD>
{
case DRIVE_REMOVABLE:
ulIconIndex = 2+5;
break;
case DRIVE_FIXED:
ulIconIndex = 3+5;
break;
case DRIVE_REMOTE:
ulIconIndex = 4+5;
break;
case DRIVE_CDROM:
ulIconIndex = 9; //Win7Ϊ10
break;
default:
ulIconIndex = 0;
break;
}
}
// 02E3F844 43 03 04 58 02 00 73 D7 00 00 B1 BE B5 D8 B4 C5 C5 CC 00 4E 54 46 53 00 44 C..X..s...<2E><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD>.NTFS.D
// 2E3F85E 03 04 20 03 00 FC 5B 00 00 B1 BE B5 D8 B4 C5 C5 CC 00 4E 54 46 53 00
CString strVolume;
strVolume.Format("%c:\\", Travel[i]);//c:
int iItem = m_ControlList_Client.InsertItem(i, strVolume,ulIconIndex);
m_ControlList_Client.SetItemData(iItem, 1); //<2F><><EFBFBD><EFBFBD>ʾ
unsigned long ulHardDiskAmountMB = 0; // <20>ܴ<EFBFBD>С
unsigned long ulHardDiskFreeMB = 0; // ʣ<><CAA3><EFBFBD>ռ<EFBFBD>
memcpy(&ulHardDiskAmountMB, Travel + i + 2, 4);
memcpy(&ulHardDiskFreeMB, Travel + i + 6, 4);
CString strCount;
strCount.Format("%10.1f GB", (float)ulHardDiskAmountMB / 1024);
m_ControlList_Client.SetItemText(iItem, 2, strCount);
strCount.Format("%10.1f GB", (float)ulHardDiskFreeMB / 1024);
m_ControlList_Client.SetItemText(iItem, 3, strCount);
i += 10; //10
CString strTypeName;
strTypeName = Travel + i;
m_ControlList_Client.SetItemText(iItem, 1, strTypeName);
i += strlen(Travel + i) + 1;
i += strlen(Travel + i) + 1;
}
}
void CFileManagerDlg::OnNMDblclkListServer(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>ӿؼ<D3BF>֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (m_ControlList_Server.GetSelectedCount() == 0 || m_ControlList_Server.GetItemData(m_ControlList_Server.GetSelectionMark()) != 1)
return;
FixedServerFileList();
*pResult = 0;
}
VOID CFileManagerDlg::FixedServerFileList(CString strDirectory)
{
if (strDirectory.GetLength() == 0)
{
int iItem = m_ControlList_Server.GetSelectionMark();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD>еģ<D0B5><C4A3><EFBFBD>Ŀ¼
if (iItem != -1)
{
if (m_ControlList_Server.GetItemData(iItem) == 1) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
strDirectory = m_ControlList_Server.GetItemText(iItem, 0);
}
}
// <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD>õ<EFBFBD>·<EFBFBD><C2B7>
else
{
m_ComboBox_Server.GetWindowText(m_Server_File_Path);
}
}
if (strDirectory == "..")
{
m_Server_File_Path = GetParentDirectory(m_Server_File_Path);
}
// ˢ<>µ<EFBFBD>ǰ<EFBFBD><C7B0>
else if (strDirectory != ".") //c:\ 1
{
/* c:\ */
m_Server_File_Path += strDirectory;
if(m_Server_File_Path.Right(1) != "\\")
{
m_Server_File_Path += "\\";
}
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD>Ŀ¼,<2C><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD>б<EFBFBD>
if (m_Server_File_Path.GetLength() == 0)
{
FixedServerDiskDriverList();
return;
}
m_ComboBox_Server.InsertString(0, m_Server_File_Path);
m_ComboBox_Server.SetCurSel(0);
m_ControlList_Server.DeleteAllItems();
while(m_ControlList_Server.DeleteColumn(0) != 0); //ɾ<><C9BE>
m_ControlList_Server.InsertColumn(0, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", LVCFMT_LEFT, 200);
m_ControlList_Server.InsertColumn(1, "<EFBFBD><EFBFBD>С", LVCFMT_LEFT, 100);
m_ControlList_Server.InsertColumn(2, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", LVCFMT_LEFT, 100);
m_ControlList_Server.InsertColumn(3, "<EFBFBD>޸<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", LVCFMT_LEFT, 115);
int iItemIndex = 0;
m_ControlList_Server.SetItemData(m_ControlList_Server.InsertItem(iItemIndex++, "..",
GetServerIconIndex(NULL, FILE_ATTRIBUTE_DIRECTORY)),1);
// i Ϊ 0 ʱ<><CAB1>Ŀ¼<C4BF><C2BC>i Ϊ 1ʱ<31><CAB1><EFBFBD>ļ<EFBFBD>
for (int i = 0; i < 2; i++)
{
CFileFind FindFile;
BOOL bContinue;
bContinue = FindFile.FindFile(m_Server_File_Path + "*.*"); //c:\*.* //.. . 1.txt
while (bContinue)
{
bContinue = FindFile.FindNextFile();
if (FindFile.IsDots()) // .
continue;
BOOL bIsInsert = !FindFile.IsDirectory() == i;
if (!bIsInsert)
continue;
int iItem = m_ControlList_Server.InsertItem(iItemIndex++, FindFile.GetFileName(),
GetServerIconIndex(FindFile.GetFileName(), GetFileAttributes(FindFile.GetFilePath())));
m_ControlList_Server.SetItemData(iItem, FindFile.IsDirectory());
SHFILEINFO sfi;
SHGetFileInfo(FindFile.GetFileName(), FILE_ATTRIBUTE_NORMAL, &sfi,sizeof(SHFILEINFO),
SHGFI_TYPENAME | SHGFI_USEFILEATTRIBUTES);
if (FindFile.IsDirectory())
{
m_ControlList_Server.SetItemText(iItem, 2, "<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>");
}
else
{
m_ControlList_Server.SetItemText(iItem,2, sfi.szTypeName);
}
CString strFileLength;
strFileLength.Format("%10d KB", FindFile.GetLength() / 1024 + (FindFile.GetLength() % 1024 ? 1 : 0));
m_ControlList_Server.SetItemText(iItem, 1, strFileLength);
CTime Time;
FindFile.GetLastWriteTime(Time);
m_ControlList_Server.SetItemText(iItem, 3, Time.Format("%Y-%m-%d %H:%M"));
}
}
}
void CFileManagerDlg::OnCbnSelchangeComboServer()
{
int iIndex = m_ComboBox_Server.GetCurSel();
CString strString;
m_ComboBox_Server.GetLBText(iIndex,strString);
m_ComboBox_Server.SetWindowText(strString);
FixedServerFileList();
}
void CFileManagerDlg::OnViewBigIcon()
{
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEB4A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_ControlList_Server.ModifyStyle(LVS_TYPEMASK, LVS_ICON);
}
void CFileManagerDlg::OnViewSmallIcon()
{
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEB4A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_ControlList_Server.ModifyStyle(LVS_TYPEMASK, LVS_SMALLICON);
}
void CFileManagerDlg::OnViewDetail()
{
m_ControlList_Server.ModifyStyle(LVS_TYPEMASK, LVS_REPORT);
}
void CFileManagerDlg::OnViewList()
{
m_ControlList_Server.ModifyStyle(LVS_TYPEMASK, LVS_LIST);
}
void CFileManagerDlg::OnNMDblclkListClient(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
if (m_ControlList_Client.GetSelectedCount() == 0 || m_ControlList_Client.GetItemData(m_ControlList_Client.GetSelectionMark()) != 1)
{
return;
}
GetClientFileList(); //<2F><><EFBFBD><EFBFBD>Ϣ
*pResult = 0;
}
VOID CFileManagerDlg::GetClientFileList(CString strDirectory)
{
if (strDirectory.GetLength() == 0) //<2F><><EFBFBD>̾<EFBFBD>
{
int iItem = m_ControlList_Client.GetSelectionMark();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD>еģ<D0B5><C4A3><EFBFBD>Ŀ¼
if (iItem != -1)
{
if (m_ControlList_Client.GetItemData(iItem) == 1)
{
strDirectory = m_ControlList_Client.GetItemText(iItem, 0); /* D:\ */
}
}
}
else if (strDirectory != ".")
{
m_Client_File_Path += strDirectory;
if(m_Client_File_Path.Right(1) != "\\")
{
m_Client_File_Path += "\\";
}
}
if (m_Client_File_Path.GetLength() == 0)
{
// FixedRemoteDriveList();
return;
}
ULONG ulLength = m_Client_File_Path.GetLength() + 2;
BYTE *szBuffer = (BYTE *)new BYTE[ulLength];
//<2F><>COMMAND_LIST_FILES <20><><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD>ƶˣ<C6B6><CBA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
szBuffer[0] = COMMAND_LIST_FILES;
memcpy(szBuffer + 1, m_Client_File_Path.GetBuffer(0), ulLength - 1);
m_iocpServer->OnClientPreSending(m_ContextObject, szBuffer, ulLength);
delete[] szBuffer;
szBuffer = NULL;
// m_Remote_Directory_ComboBox.InsertString(0, m_Remote_Path);
// m_Remote_Directory_ComboBox.SetCurSel(0);
// <20>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_ControlList_Client.EnableWindow(FALSE);
m_ProgressCtrl->SetPos(0);
}
VOID CFileManagerDlg::OnReceiveComplete()
{
if (m_ContextObject==NULL)
{
return;
}
switch(m_ContextObject->InDeCompressedBuffer.GetBuffer()[0])
{
case TOKEN_FILE_LIST:
{
FixedClientFileList(m_ContextObject->InDeCompressedBuffer.GetBuffer(),
m_ContextObject->InDeCompressedBuffer.GetBufferLength() - 1);
break;
}
case TOKEN_DATA_CONTINUE:
{
SendFileData();
break;
}
case TOKEN_GET_TRANSFER_MODE:
{
SendTransferMode();
break;
}
}
}
VOID CFileManagerDlg::SendTransferMode() //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ض˷<D8B6><CBB7>͵<EFBFBD><CDB5>ļ<EFBFBD><C4BC>ڱ<EFBFBD><DAB1>ض<EFBFBD><D8B6>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD>δ<EFBFBD><CEB4><EFBFBD>
{
CFileTransferModeDlg Dlg(this);
Dlg.m_strFileName = m_strDestFileFullPath;
switch (Dlg.DoModal())
{
case IDC_OVERWRITE:
m_ulTransferMode = TRANSFER_MODE_OVERWRITE;
break;
case IDC_OVERWRITE_ALL:
m_ulTransferMode = TRANSFER_MODE_OVERWRITE_ALL;
break;
case IDC_JUMP:
m_ulTransferMode = TRANSFER_MODE_JUMP;
break;
case IDC_JUMP_ALL:
m_ulTransferMode = TRANSFER_MODE_JUMP_ALL;
break;
case IDCANCEL:
m_ulTransferMode = TRANSFER_MODE_CANCEL;
break;
}
if (m_ulTransferMode == TRANSFER_MODE_CANCEL)
{
// m_bIsStop = true;
EndCopyServerToClient();
return;
}
BYTE bToken[5];
bToken[0] = COMMAND_SET_TRANSFER_MODE;
memcpy(bToken + 1, &m_ulTransferMode, sizeof(m_ulTransferMode));
m_iocpServer->OnClientPreSending(m_ContextObject, (unsigned char *)&bToken, sizeof(bToken));
}
VOID CFileManagerDlg::SendFileData()
{
FILE_SIZE *FileSize = (FILE_SIZE *)(m_ContextObject->InDeCompressedBuffer.GetBuffer(1));
LONG dwOffsetHigh = FileSize->dwSizeHigh ; //0
LONG dwOffsetLow = FileSize->dwSizeLow; //0
m_ulCounter = MAKEINT64(FileSize->dwSizeLow, FileSize->dwSizeHigh); //0
ShowProgress(); //֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (m_ulCounter == m_OperatingFileLength||m_bIsStop)
{
EndCopyServerToClient(); //<2F><><EFBFBD><EFBFBD><EFBFBD>¸<EFBFBD><C2B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
return;
}
HANDLE hFile;
hFile = CreateFile(m_strSourFileFullPath.GetBuffer(0), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if (hFile == INVALID_HANDLE_VALUE)
{
return;
}
SetFilePointer(hFile, dwOffsetLow, &dwOffsetHigh, FILE_BEGIN); //8192 4G 300
int iHeadLength = 9; // 1 + 4 + 4 <20><><EFBFBD>ݰ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>С<EFBFBD><D0A1>Ϊ<EFBFBD>̶<EFBFBD><CCB6><EFBFBD>9
DWORD dwNumberOfBytesToRead = MAX_SEND_BUFFER - iHeadLength;
DWORD dwNumberOfBytesRead = 0;
BYTE *szBuffer = (BYTE *)LocalAlloc(LPTR, MAX_SEND_BUFFER);
if (szBuffer==NULL)
{
CloseHandle(hFile);
return;
}
szBuffer[0] = COMMAND_FILE_DATA;
memcpy(szBuffer + 1, &dwOffsetHigh, sizeof(dwOffsetHigh));
memcpy(szBuffer + 5, &dwOffsetLow, sizeof(dwOffsetLow)); //flag 0000 00 40 20 20
ReadFile(hFile, szBuffer + iHeadLength, dwNumberOfBytesToRead, &dwNumberOfBytesRead, NULL);
CloseHandle(hFile);
if (dwNumberOfBytesRead > 0)
{
ULONG ulLength = dwNumberOfBytesRead + iHeadLength;
m_iocpServer->OnClientPreSending(m_ContextObject, szBuffer, ulLength);
}
LocalFree(szBuffer);
}
VOID CFileManagerDlg::FixedClientFileList(BYTE *szBuffer, ULONG ulLength)
{
// <20>ؽ<EFBFBD><D8BD><EFBFBD><EFBFBD><EFBFBD>
m_ControlList_Client.DeleteAllItems();
while(m_ControlList_Client.DeleteColumn(0) != 0);
m_ControlList_Client.InsertColumn(0, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", LVCFMT_LEFT, 200);
m_ControlList_Client.InsertColumn(1, "<EFBFBD><EFBFBD>С", LVCFMT_LEFT, 100);
m_ControlList_Client.InsertColumn(2, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", LVCFMT_LEFT, 100);
m_ControlList_Client.InsertColumn(3, "<EFBFBD>޸<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", LVCFMT_LEFT, 115);
int iItemIndex = 0;
m_ControlList_Client.SetItemData(m_ControlList_Client.InsertItem(iItemIndex++, "..", GetServerIconIndex(NULL, FILE_ATTRIBUTE_DIRECTORY)),1);
/*
ListView <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˸
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD>SetRedraw(FALSE)
<EFBFBD><EFBFBD><EFBFBD>º<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SetRedraw(TRUE)
*/
//m_list_remote.SetRedraw(FALSE);
if (ulLength != 0)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD>б<EFBFBD><D0B1><EFBFBD>
for (int i = 0; i < 2; i++)
{
// <20><><EFBFBD><EFBFBD>Token //[Flag 1 HelloWorld\0<><30>С <20><>С ʱ<><CAB1> ʱ<><CAB1> 0 1.txt\0 <20><>С <20><>С ʱ<><CAB1> ʱ<><CAB1>]
char *szTravel = (char *)(szBuffer + 1);
//[1 HelloWorld\0<><30>С <20><>С ʱ<><CAB1> ʱ<><CAB1> 0 1.txt\0 <20><>С <20><>С ʱ<><CAB1> ʱ<><CAB1>]
for(char *szBase = szTravel; szTravel - szBase < ulLength - 1;)
{
char *szFileName = NULL;
DWORD dwFileSizeHigh = 0; // <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ֽڴ<D6BD>С
DWORD dwFileSizeLow = 0; // <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ֽڴ<D6BD>С
int iItem = 0;
bool bIsInsert = false;
FILETIME FileTime;
int iType = *szTravel ? FILE_ATTRIBUTE_DIRECTORY : FILE_ATTRIBUTE_NORMAL;
// i Ϊ 0 ʱ<><CAB1><EFBFBD><EFBFBD>Ŀ¼<C4BF><C2BC>iΪ1ʱ<31><CAB1><EFBFBD>ļ<EFBFBD>
bIsInsert = !(iType == FILE_ATTRIBUTE_DIRECTORY) == i;
//0==1 0==0 !1 0
////[HelloWorld\0<><30>С <20><>С ʱ<><CAB1> ʱ<><CAB1> 0 1.txt\0 <20><>С <20><>С ʱ<><CAB1> ʱ<><CAB1>]
szFileName = ++szTravel;
if (bIsInsert)
{
iItem = m_ControlList_Client.InsertItem(iItemIndex++, szFileName, GetServerIconIndex(szFileName, iType));
m_ControlList_Client.SetItemData(iItem, iType == FILE_ATTRIBUTE_DIRECTORY); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SHFILEINFO sfi;
SHGetFileInfo(szFileName, FILE_ATTRIBUTE_NORMAL | iType, &sfi,sizeof(SHFILEINFO),
SHGFI_TYPENAME | SHGFI_USEFILEATTRIBUTES);
m_ControlList_Client.SetItemText(iItem, 2, sfi.szTypeName);
}
// <20>õ<EFBFBD><C3B5>ļ<EFBFBD><C4BC><EFBFBD>С
szTravel += strlen(szFileName) + 1;
if (bIsInsert)
{
memcpy(&dwFileSizeHigh,szTravel, 4);
memcpy(&dwFileSizeLow, szTravel + 4, 4);
CString strFileSize;
strFileSize.Format("%10d KB", (dwFileSizeHigh * (MAXDWORD+1)) / 1024 + dwFileSizeLow / 1024 + (dwFileSizeLow % 1024 ? 1 : 0));
m_ControlList_Client.SetItemText(iItem, 1, strFileSize);
memcpy(&FileTime, szTravel + 8, sizeof(FILETIME));
CTime Time(FileTime);
m_ControlList_Client.SetItemText(iItem, 3, Time.Format("%Y-%m-%d %H:%M"));
}
szTravel += 16;
}
}
}
// m_list_remote.SetRedraw(TRUE);
// <20>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>
m_ControlList_Client.EnableWindow(TRUE);
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD><D8B6>򱻿ض˽<D8B6><CBBD>п<EFBFBD><D0BF><EFBFBD>
void CFileManagerDlg::OnLvnBegindragListServer(NMHDR *pNMHDR, LRESULT *pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
if (m_Client_File_Path.IsEmpty()||m_Server_File_Path.IsEmpty())
{
return;
}
// m_ulDragIndex = pNMListView->iItem; //<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD>
if(m_ControlList_Server.GetSelectedCount() > 1) //<2F><EFBFBD><E4BBBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ <20><><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ק
{
m_hCursor = AfxGetApp()->LoadCursor(IDC_CURSOR_MDRAG);
}
else
{
m_hCursor = AfxGetApp()->LoadCursor(IDC_CURSOR_DRAG);
}
m_bDragging = TRUE;
m_DragControlList = &m_ControlList_Server;
m_DropControlList = &m_ControlList_Server;
SetCapture();
*pResult = 0;
}
void CFileManagerDlg::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>ֵ
if (m_bDragging) //<2F><><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD>ק<EFBFBD><D7A7><EFBFBD><EFBFBD>Ȥ
{
CPoint Point(point); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
ClientToScreen(&Point); //ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD>Ļ<EFBFBD><C4BB>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><C3B4>ھ<EFBFBD><DABE><EFBFBD>
CWnd* pDropWnd = WindowFromPoint(Point); //ֵ<><D6B5><EFBFBD><EFBFBD>λ<EFBFBD><CEBB> <20><>û<EFBFBD>пؼ<D0BF>
if(pDropWnd->IsKindOf(RUNTIME_CLASS (CListCtrl))) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǵĴ<C7B5><C4B4>ڷ<EFBFBD>Χ<EFBFBD><CEA7>
{
SetCursor(m_hCursor);
return;
}
else
{
SetCursor(LoadCursor(NULL,IDC_NO)); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڻ<EFBFBD><DABB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
}
}
CDialog::OnMouseMove(nFlags, point);
}
void CFileManagerDlg::OnLButtonUp(UINT nFlags, CPoint point)
{
if (m_bDragging)
{
ReleaseCapture(); //<2F>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>
m_bDragging = FALSE;
CPoint Point(point); //<2F><><EFBFBD>õ<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB>
ClientToScreen (&Point); //ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>ǰ<EFBFBD>û<EFBFBD><C3BB>Ĵ<EFBFBD><C4B4>ڵ<EFBFBD>λ<EFBFBD><CEBB>
CWnd* DropWnd = WindowFromPoint (Point); //<2F><><EFBFBD>õ<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>޿ؼ<DEBF>
if (DropWnd->IsKindOf (RUNTIME_CLASS (CListCtrl))) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ListControl
{
m_DropControlList = (CListCtrl*)DropWnd; //<2F><><EFBFBD>浱ǰ<E6B5B1>Ĵ<EFBFBD><C4B4>ھ<EFBFBD><DABE><EFBFBD>
DropItemOnList(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
}
CDialog::OnLButtonUp(nFlags, point);
}
VOID CFileManagerDlg::DropItemOnList()
{
if (m_DragControlList==m_DropControlList)
{
return;
}
if ((CWnd *)m_DropControlList == &m_ControlList_Server)
{
// m_nDropIndex = m_list_local.GetSelectionMark();
// OnIdtRemoteCopy();
}
else if ((CWnd *)m_DropControlList == &m_ControlList_Client)
{
//m_nDropIndex = m_list_remote.GetSelectionMark();
OnCopyServerToClient();
}
else
{
return;
}
// <20><><EFBFBD><EFBFBD>
//m_nDropIndex = -1;
}
VOID CFileManagerDlg::OnCopyServerToClient() //<2F><><EFBFBD><EFBFBD><EFBFBD>ض˵<D8B6><CBB5><EFBFBD><EFBFBD>ض<EFBFBD>
{
m_Remote_Upload_Job.RemoveAll();
POSITION Pos = m_ControlList_Server.GetFirstSelectedItemPosition();
while(Pos)
{
int iItem = m_ControlList_Server.GetNextSelectedItem(Pos);
CString strFileFullPath = NULL;
if (0)
//if (m_IsLocalFinding)
{/* "2015-02-09 12:550 .-. Deja Ver (Ft. Tony Dize).mp3" */
//strFileName = m_ControlList_Server.GetItemText(iItem, 3) + m_list_local.GetItemText(nItem, 0);
}
else
{
strFileFullPath = m_Server_File_Path + m_ControlList_Server.GetItemText(iItem, 0);
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼
if (m_ControlList_Server.GetItemData(iItem))
{
strFileFullPath += '\\';
FixedServerToClientDirectory(strFileFullPath.GetBuffer(0));
}
else
{
// <20><><EFBFBD>ӵ<EFBFBD><D3B5>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>ȥ
HANDLE hFile = CreateFile(strFileFullPath,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if (hFile==INVALID_HANDLE_VALUE)
{
continue;
}
m_Remote_Upload_Job.AddTail(strFileFullPath);
CloseHandle(hFile);
}
}
if (m_Remote_Upload_Job.IsEmpty())
{
::MessageBox(m_hWnd, "<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>", "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", MB_OK|MB_ICONWARNING);
return;
}
EnableControl(FALSE);
SendToClientJob(); //<2F><><EFBFBD>͵<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
BOOL CFileManagerDlg::FixedServerToClientDirectory(LPCTSTR szDircetoryFullPath)
{
CHAR szBuffer[MAX_PATH];
CHAR *szSlash = NULL;
memset(szBuffer, 0, sizeof(szBuffer));
if (szDircetoryFullPath[strlen(szDircetoryFullPath) - 1] != '\\')
szSlash = "\\";
else
szSlash = "";
sprintf(szBuffer, "%s%s*.*", szDircetoryFullPath, szSlash);
WIN32_FIND_DATA wfd;
HANDLE hFind = FindFirstFile(szBuffer, &wfd); //C;|1\*.*
if (hFind == INVALID_HANDLE_VALUE) // <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
return FALSE;
do
{
if (wfd.cFileName[0] == '.')
continue; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼ '.'<27><>'..'
if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
CHAR szv1[MAX_PATH];
sprintf(szv1, "%s%s%s", szDircetoryFullPath,szSlash, wfd.cFileName);
FixedServerToClientDirectory(szv1); // <20><><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD>Ŀ¼<C4BF><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼<C4BF><C2BC><EFBFBD>еݹ<D0B5>
}
else
{
CString strFileFullPath;
strFileFullPath.Format("%s%s%s", szDircetoryFullPath, szSlash, wfd.cFileName);
m_Remote_Upload_Job.AddTail(strFileFullPath);
// <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>в<EFBFBD><D0B2><EFBFBD>
}
} while (FindNextFile(hFind, &wfd));
FindClose(hFind); // <20>رղ<D8B1><D5B2>Ҿ<EFBFBD><D2BE><EFBFBD>
return true;
}
VOID CFileManagerDlg::EndCopyServerToClient() //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>оͻָ<CDBB><D6B8><EFBFBD><EFBFBD><EFBFBD>
{
m_ulCounter = 0;
m_OperatingFileLength = 0;
ShowProgress();
if (m_Remote_Upload_Job.IsEmpty()|| m_bIsStop)
{
m_Remote_Upload_Job.RemoveAll();
m_bIsStop = FALSE;
EnableControl(TRUE);
m_ulTransferMode = TRANSFER_MODE_NORMAL;
GetClientFileList(".");
}
else
{
Sleep(5);
SendToClientJob();
}
return;
}
BOOL CFileManagerDlg::SendToClientJob() //<2F><><EFBFBD><EFBFBD><EFBFBD>ض˵<D8B6><CBB5><EFBFBD><EFBFBD>ض˵ķ<CBB5><C4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
if (m_Remote_Upload_Job.IsEmpty())
return FALSE;
CString strDestDirectory = m_Client_File_Path;
m_strSourFileFullPath = m_Remote_Upload_Job.GetHead(); //<2F><><EFBFBD>õ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DWORD dwSizeHigh;
DWORD dwSizeLow;
// 1 <20>ֽ<EFBFBD>token, 8<>ֽڴ<D6BD>С, <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>, '\0'
HANDLE hFile;
CString strString = m_strSourFileFullPath; // Զ<><D4B6><EFBFBD>ļ<EFBFBD>
// <20>õ<EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><E6B5BD>Զ<EFBFBD>̵<EFBFBD><CCB5>ļ<EFBFBD>·<EFBFBD><C2B7>
strString.Replace(m_Server_File_Path, m_Client_File_Path); //D:1.txt E:1.txt
m_strDestFileFullPath = strString; //<2F><><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>
hFile = CreateFile(m_strSourFileFullPath.GetBuffer(0), GENERIC_READ, FILE_SHARE_READ,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); //<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>Ĵ<EFBFBD>С
if (hFile == INVALID_HANDLE_VALUE)
{
return FALSE;
}
dwSizeLow = GetFileSize (hFile, &dwSizeHigh);
m_OperatingFileLength = (dwSizeHigh * (MAXDWORD+1)) + dwSizeLow;
CloseHandle(hFile);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
ULONG ulLength =strString.GetLength() + 10;
BYTE *szBuffer = (BYTE *)LocalAlloc(LPTR, ulLength);
memset(szBuffer, 0, ulLength);
szBuffer[0] = COMMAND_FILE_SIZE;
//[Flag 0001 0001 E:\1.txt\0 ]
//<2F>򱻿ض˷<D8B6><CBB7><EFBFBD><EFBFBD><EFBFBD>Ϣ COMMAND_FILE_SIZE <20><><EFBFBD>ض˻<D8B6>ִ<EFBFBD><D6B4>CreateLocalRecvFile<6C><65><EFBFBD><EFBFBD>
//<2F>Ӷ<EFBFBD><D3B6>ֳ<EFBFBD><D6B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD>ھͻ<DABE><CDBB><EFBFBD><EFBFBD>յ<EFBFBD>
// TOKEN_GET_TRANSFER_MODE
//<2F><>һ<EFBFBD><D2BB><EFBFBD>DZ<EFBFBD><C7B1>ض˵<D8B6><CBB5><EFBFBD>GetFileData<74><61><EFBFBD><EFBFBD><EFBFBD>Ӷ<EFBFBD><D3B6><EFBFBD><EFBFBD>յ<EFBFBD>TOKEN_DATA_CONTINUE
memcpy(szBuffer + 1, &dwSizeHigh, sizeof(DWORD));
memcpy(szBuffer + 5, &dwSizeLow, sizeof(DWORD));
memcpy(szBuffer + 9, strString.GetBuffer(0), strString.GetLength() + 1);
m_iocpServer->OnClientPreSending(m_ContextObject,szBuffer,ulLength);
LocalFree(szBuffer);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD>Լ<EFBFBD>
m_Remote_Upload_Job.RemoveHead();
return TRUE;
}
void CFileManagerDlg::OnNMRClickListServer(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
CMenu Menu;
Menu.LoadMenu(IDR_MENU_FILE_OPERATION);
CMenu* SubMenu = Menu.GetSubMenu(0);
CPoint Point;
GetCursorPos(&Point);
SubMenu->DeleteMenu(2, MF_BYPOSITION);
if (m_ControlList_Server.GetSelectedCount() == 0)
{
int iCount = SubMenu->GetMenuItemCount();
for (int i = 0; i < iCount; i++)
{
SubMenu->EnableMenuItem(i, MF_BYPOSITION | MF_GRAYED);
}
}
SubMenu->TrackPopupMenu(TPM_LEFTALIGN, Point.x, Point.y, this);
*pResult = 0;
}
void CFileManagerDlg::OnOperationServerRun()
{
CString strFileFullPath;
strFileFullPath = m_Server_File_Path + m_ControlList_Server.GetItemText(m_ControlList_Server.GetSelectionMark(), 0);
ShellExecute(NULL, "open", strFileFullPath, NULL, NULL, SW_SHOW); //CreateProcess
}
void CFileManagerDlg::OnOperationRename()
{
POINT Point;
GetCursorPos(&Point);
if (GetFocus()->m_hWnd == m_ControlList_Server.m_hWnd)
{
m_ControlList_Server.EditLabel(m_ControlList_Server.GetSelectionMark());
}
else
{
m_ControlList_Client.EditLabel(m_ControlList_Client.GetSelectionMark());
}
}
void CFileManagerDlg::OnLvnEndlabeleditListServer(NMHDR *pNMHDR, LRESULT *pResult)
{
NMLVDISPINFO *pDispInfo = reinterpret_cast<NMLVDISPINFO*>(pNMHDR);
CString strNewFileName, strExistingFileFullPath, strNewFileFullPath;
m_ControlList_Server.GetEditControl()->GetWindowText(strNewFileName);
strExistingFileFullPath = m_Server_File_Path + m_ControlList_Server.GetItemText(pDispInfo->item.iItem, 0);
strNewFileFullPath = m_Server_File_Path + strNewFileName;
*pResult = ::MoveFile(strExistingFileFullPath.GetBuffer(0), strNewFileFullPath.GetBuffer(0));
}
void CFileManagerDlg::OnNMRClickListClient(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
CMenu Menu;
Menu.LoadMenu(IDR_MENU_FILE_OPERATION);
CMenu* SubMenu = Menu.GetSubMenu(0);
CPoint Point;
GetCursorPos(&Point);
SubMenu->DeleteMenu(1, MF_BYPOSITION);
if (m_ControlList_Client.GetSelectedCount() == 0)
{
int iCount = SubMenu->GetMenuItemCount();
for (int i = 0; i < iCount; i++)
{
SubMenu->EnableMenuItem(i, MF_BYPOSITION | MF_GRAYED);
}
}
SubMenu->TrackPopupMenu(TPM_LEFTALIGN, Point.x, Point.y, this);
*pResult = 0;
}
void CFileManagerDlg::OnOperationClientShowRun()
{
CString strFileFullPath;
strFileFullPath = m_Client_File_Path + m_ControlList_Client.GetItemText(m_ControlList_Client.GetSelectionMark(), 0);
ULONG ulLength = strFileFullPath.GetLength() + 2;
BYTE szBuffer[MAX_PATH+10];
szBuffer[0] = COMMAND_OPEN_FILE_SHOW;
memcpy(szBuffer + 1, strFileFullPath.GetBuffer(0), ulLength - 1);
m_iocpServer->OnClientPreSending(m_ContextObject, szBuffer, ulLength);
}
void CFileManagerDlg::OnOperationClientHideRun()
{
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEB4A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
void CFileManagerDlg::OnLvnEndlabeleditListClient(NMHDR *pNMHDR, LRESULT *pResult)
{
NMLVDISPINFO *pDispInfo = reinterpret_cast<NMLVDISPINFO*>(pNMHDR);
CString strNewFileName, strExistingFileFullPath, strNewFileFullPath;
m_ControlList_Client.GetEditControl()->GetWindowText(strNewFileName);
strExistingFileFullPath = m_Client_File_Path + m_ControlList_Client.GetItemText(pDispInfo->item.iItem, 0);
strNewFileFullPath = m_Client_File_Path + strNewFileName;
if (strExistingFileFullPath != strNewFileFullPath)
{
UINT ulLength = strExistingFileFullPath.GetLength() + strNewFileFullPath.GetLength() + 3;
LPBYTE szBuffer = (LPBYTE)LocalAlloc(LPTR, ulLength);
szBuffer[0] = COMMAND_RENAME_FILE; //<2F>򱻿ض˷<D8B6><CBB7><EFBFBD><EFBFBD><EFBFBD>Ϣ
memcpy(szBuffer + 1, strExistingFileFullPath.GetBuffer(0), strExistingFileFullPath.GetLength() + 1);
memcpy(szBuffer + 2 + strExistingFileFullPath.GetLength(),
strNewFileFullPath.GetBuffer(0), strNewFileFullPath.GetLength() + 1);
m_iocpServer->OnClientPreSending(m_ContextObject, szBuffer, ulLength);
LocalFree(szBuffer);
GetClientFileList(".");
}
*pResult = 0;
}
void CFileManagerDlg::OnOperationCompress()
{
POINT Point;
GetCursorPos(&Point);
if (GetFocus()->m_hWnd == m_ControlList_Server.m_hWnd)
{
ServerCompress(1);
}
}
VOID CFileManagerDlg::ServerCompress(ULONG ulType)
{
POSITION Pos = m_ControlList_Server.GetFirstSelectedItemPosition();
CString strString;
while(Pos)
{
int iItem = m_ControlList_Server.GetNextSelectedItem(Pos);
strString += m_Server_File_Path + m_ControlList_Server.GetItemText(iItem, 0); //C:\1.txt C:\2.txt s
strString += _T(" ");
}
if (!strString.IsEmpty())
{
CString strRARFileFullPath;
strRARFileFullPath += m_Server_File_Path;
CFileCompress Dlg(this,ulType);
if (Dlg.DoModal()==IDOK)
{
if (Dlg.m_EditRarName.IsEmpty())
{
MessageBox("ERROR");
return;
}
strRARFileFullPath += Dlg.m_EditRarName;
strRARFileFullPath += ".rar";
CompressFiles(strRARFileFullPath.GetBuffer(strRARFileFullPath.GetLength()),
strString.GetBuffer(strString.GetLength()),ulType);
}
}
}
BOOL CFileManagerDlg::CompressFiles(PCSTR strRARFileFullPath,PSTR strString,ULONG ulType)
{
// ibck <20>Ǻ<EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD>
PSTR szExePath = "/c c:\\progra~1\\winrar\\winrar.exe a -ad -ep1 -ibck ";
//"/c c:\\progra~1\\winrar\\winrar.exe -x -ep1 -ibck " ;
ULONG ulLength =strlen(szExePath) + strlen(strRARFileFullPath)+strlen(strString)+2;
PSTR szBuffer = (PSTR)malloc(sizeof(CHAR)* ulLength);
StringCchCopyN(szBuffer , ulLength , szExePath , strlen(szExePath));
StringCchCatN( szBuffer ,ulLength , strRARFileFullPath , strlen(strRARFileFullPath) );
StringCchCatN( szBuffer ,ulLength , " " ,1);
StringCchCatN( szBuffer ,ulLength , strString , strlen(strString));
if (ulType==1)
{
SHELLEXECUTEINFO sei = {0};
sei.cbSize = sizeof sei;
sei.lpVerb = "open";
sei.lpFile = "c:\\windows\\system32\\cmd.exe";
sei.lpParameters = szBuffer;
sei.nShow = SW_HIDE;
sei.fMask = SEE_MASK_NOCLOSEPROCESS;
BOOL fReturn = ShellExecuteEx(&sei);
CloseHandle(sei.hProcess);
return (fReturn);
}
return TRUE;
}