2019-01-06 21:18:26 +08:00
|
|
|
|
// FileManagerDlg.cpp : implementation file
|
2019-01-05 20:21:43 +08:00
|
|
|
|
//
|
|
|
|
|
|
|
|
|
|
|
|
#include "stdafx.h"
|
|
|
|
|
|
#include "2015Remote.h"
|
|
|
|
|
|
#include "FileManagerDlg.h"
|
|
|
|
|
|
#include "FileTransferModeDlg.h"
|
2019-01-06 21:18:26 +08:00
|
|
|
|
#include "InputDlg.h"
|
|
|
|
|
|
#ifdef _DEBUG
|
|
|
|
|
|
#define new DEBUG_NEW
|
|
|
|
|
|
#undef THIS_FILE
|
|
|
|
|
|
static char THIS_FILE[] = __FILE__;
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
static UINT indicators[] =
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
ID_SEPARATOR, // status line indicator
|
2019-01-05 20:21:43 +08:00
|
|
|
|
ID_SEPARATOR,
|
2019-01-06 21:18:26 +08:00
|
|
|
|
ID_SEPARATOR
|
2019-01-05 20:21:43 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
typedef struct {
|
|
|
|
|
|
LVITEM* plvi;
|
|
|
|
|
|
CString sCol2;
|
|
|
|
|
|
} lvItem, *plvItem;
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
// CFileManagerDlg dialog
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2025-02-07 19:23:15 +08:00
|
|
|
|
float GetScreenScalingFactor() {
|
|
|
|
|
|
HDC hdc = GetDC(NULL); // <20><>ȡ<EFBFBD><C8A1>Ļ<EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
int dpiX = GetDeviceCaps(hdc, LOGPIXELSX); // <20><>ȡˮƽ DPI
|
|
|
|
|
|
ReleaseDC(NULL, hdc);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>ű<EFBFBD><C5B1><EFBFBD> = DPI / <20><> DPI<50><49>96<39><36>
|
|
|
|
|
|
return dpiX / 96.0f;
|
|
|
|
|
|
}
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
CFileManagerDlg::CFileManagerDlg(CWnd* pParent, CIOCPServer* pIOCPServer, ClientContext *pContext)
|
2019-01-05 20:21:43 +08:00
|
|
|
|
: CDialog(CFileManagerDlg::IDD, pParent)
|
|
|
|
|
|
{
|
2025-02-07 19:23:15 +08:00
|
|
|
|
m_fScalingFactor = GetScreenScalingFactor();
|
2019-01-06 21:18:26 +08:00
|
|
|
|
//{{AFX_DATA_INIT(CFileManagerDlg)
|
|
|
|
|
|
//}}AFX_DATA_INIT
|
2019-01-11 21:40:11 +08:00
|
|
|
|
m_bIsClosed = false;
|
|
|
|
|
|
m_ProgressCtrl = NULL;
|
2019-01-06 21:18:26 +08:00
|
|
|
|
SHFILEINFO sfi;
|
|
|
|
|
|
SHGetFileInfo
|
|
|
|
|
|
(
|
|
|
|
|
|
"\\\\",
|
|
|
|
|
|
FILE_ATTRIBUTE_NORMAL,
|
|
|
|
|
|
&sfi,
|
|
|
|
|
|
sizeof(SHFILEINFO),
|
|
|
|
|
|
SHGFI_ICON | SHGFI_USEFILEATTRIBUTES
|
|
|
|
|
|
);
|
2019-01-26 10:35:10 +08:00
|
|
|
|
m_hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_ICON_FATHER));
|
2019-01-06 21:18:26 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD>ϵͳͼ<CDB3><CDBC><EFBFBD>б<EFBFBD>
|
2019-01-13 13:13:59 +08:00
|
|
|
|
static HIMAGELIST hImageList_Large = (HIMAGELIST)SHGetFileInfo
|
2019-01-06 21:18:26 +08:00
|
|
|
|
(
|
|
|
|
|
|
NULL,
|
|
|
|
|
|
0,
|
|
|
|
|
|
&sfi,
|
|
|
|
|
|
sizeof(SHFILEINFO),
|
|
|
|
|
|
SHGFI_LARGEICON | SHGFI_SYSICONINDEX
|
|
|
|
|
|
);
|
2019-01-13 13:13:59 +08:00
|
|
|
|
static CImageList *pLarge = CImageList::FromHandle(hImageList_Large);
|
|
|
|
|
|
m_pImageList_Large = pLarge;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>ϵͳͼ<CDB3><CDBC><EFBFBD>б<EFBFBD>
|
2019-01-13 13:13:59 +08:00
|
|
|
|
static HIMAGELIST hImageList_Small = (HIMAGELIST)SHGetFileInfo
|
2019-01-06 21:18:26 +08:00
|
|
|
|
(
|
|
|
|
|
|
NULL,
|
|
|
|
|
|
0,
|
|
|
|
|
|
&sfi,
|
|
|
|
|
|
sizeof(SHFILEINFO),
|
|
|
|
|
|
SHGFI_SMALLICON | SHGFI_SYSICONINDEX
|
|
|
|
|
|
);
|
2019-01-13 13:13:59 +08:00
|
|
|
|
static CImageList *pSmall = CImageList::FromHandle(hImageList_Small);
|
|
|
|
|
|
m_pImageList_Small = pSmall;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
// <20><>ʼ<EFBFBD><CABC>Ӧ<EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD>СΪ0
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
m_iocpServer = pIOCPServer;
|
|
|
|
|
|
m_pContext = pContext;
|
|
|
|
|
|
sockaddr_in sockAddr;
|
|
|
|
|
|
memset(&sockAddr, 0, sizeof(sockAddr));
|
|
|
|
|
|
int nSockAddrLen = sizeof(sockAddr);
|
|
|
|
|
|
BOOL bResult = getpeername(m_pContext->m_Socket,(SOCKADDR*)&sockAddr, &nSockAddrLen);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
m_IPAddress = bResult != INVALID_SOCKET ? inet_ntoa(sockAddr.sin_addr) : "";
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
|
|
|
|
|
|
memset(m_bRemoteDriveList, 0, sizeof(m_bRemoteDriveList));
|
2019-01-12 18:21:42 +08:00
|
|
|
|
PBYTE pSrc = m_pContext->m_DeCompressionBuffer.GetBuffer(1);
|
|
|
|
|
|
int length = m_pContext->m_DeCompressionBuffer.GetBufferLen() - 1;
|
|
|
|
|
|
if (length > 0)
|
|
|
|
|
|
memcpy(m_bRemoteDriveList, pSrc, length);
|
2019-01-06 21:18:26 +08:00
|
|
|
|
|
|
|
|
|
|
m_nTransferMode = TRANSFER_MODE_NORMAL;
|
|
|
|
|
|
m_nOperatingFileLength = 0;
|
|
|
|
|
|
m_nCounter = 0;
|
|
|
|
|
|
|
|
|
|
|
|
m_bIsStop = false;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
|
2019-01-05 20:21:43 +08:00
|
|
|
|
void CFileManagerDlg::DoDataExchange(CDataExchange* pDX)
|
|
|
|
|
|
{
|
|
|
|
|
|
CDialog::DoDataExchange(pDX);
|
2019-01-06 21:18:26 +08:00
|
|
|
|
//{{AFX_DATA_MAP(CFileManagerDlg)
|
|
|
|
|
|
DDX_Control(pDX, IDC_REMOTE_PATH, m_Remote_Directory_ComboBox);
|
|
|
|
|
|
DDX_Control(pDX, IDC_LOCAL_PATH, m_Local_Directory_ComboBox);
|
|
|
|
|
|
DDX_Control(pDX, IDC_LIST_REMOTE, m_list_remote);
|
|
|
|
|
|
DDX_Control(pDX, IDC_LIST_LOCAL, m_list_local);
|
|
|
|
|
|
//}}AFX_DATA_MAP
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CFileManagerDlg, CDialog)
|
2019-01-06 21:18:26 +08:00
|
|
|
|
//{{AFX_MSG_MAP(CFileManagerDlg)
|
|
|
|
|
|
ON_WM_QUERYDRAGICON()
|
|
|
|
|
|
ON_WM_SIZE()
|
|
|
|
|
|
ON_NOTIFY(NM_DBLCLK, IDC_LIST_LOCAL, OnDblclkListLocal)
|
|
|
|
|
|
ON_NOTIFY(LVN_BEGINDRAG, IDC_LIST_LOCAL, OnBegindragListLocal)
|
|
|
|
|
|
ON_NOTIFY(LVN_BEGINDRAG, IDC_LIST_REMOTE, OnBegindragListRemote)
|
2019-01-05 20:21:43 +08:00
|
|
|
|
ON_WM_MOUSEMOVE()
|
|
|
|
|
|
ON_WM_LBUTTONUP()
|
2019-01-06 21:18:26 +08:00
|
|
|
|
ON_WM_TIMER()
|
|
|
|
|
|
ON_WM_CLOSE()
|
|
|
|
|
|
ON_NOTIFY(NM_DBLCLK, IDC_LIST_REMOTE, OnDblclkListRemote)
|
|
|
|
|
|
ON_COMMAND(IDT_LOCAL_PREV, OnLocalPrev)
|
|
|
|
|
|
ON_COMMAND(IDT_REMOTE_PREV, OnRemotePrev)
|
|
|
|
|
|
ON_COMMAND(IDT_LOCAL_VIEW, OnLocalView)
|
|
|
|
|
|
ON_COMMAND(IDM_LOCAL_LIST, OnLocalList)
|
|
|
|
|
|
ON_COMMAND(IDM_LOCAL_REPORT, OnLocalReport)
|
|
|
|
|
|
ON_COMMAND(IDM_LOCAL_BIGICON, OnLocalBigicon)
|
|
|
|
|
|
ON_COMMAND(IDM_LOCAL_SMALLICON, OnLocalSmallicon)
|
|
|
|
|
|
ON_COMMAND(IDM_REMOTE_BIGICON, OnRemoteBigicon)
|
|
|
|
|
|
ON_COMMAND(IDM_REMOTE_LIST, OnRemoteList)
|
|
|
|
|
|
ON_COMMAND(IDM_REMOTE_REPORT, OnRemoteReport)
|
|
|
|
|
|
ON_COMMAND(IDM_REMOTE_SMALLICON, OnRemoteSmallicon)
|
|
|
|
|
|
ON_COMMAND(IDT_REMOTE_VIEW, OnRemoteView)
|
|
|
|
|
|
ON_UPDATE_COMMAND_UI(IDT_LOCAL_STOP, OnUpdateLocalStop)
|
|
|
|
|
|
ON_UPDATE_COMMAND_UI(IDT_REMOTE_STOP, OnUpdateRemoteStop)
|
|
|
|
|
|
ON_UPDATE_COMMAND_UI(IDT_LOCAL_PREV, OnUpdateLocalPrev)
|
|
|
|
|
|
ON_UPDATE_COMMAND_UI(IDT_REMOTE_PREV, OnUpdateRemotePrev)
|
|
|
|
|
|
ON_UPDATE_COMMAND_UI(IDT_LOCAL_COPY, OnUpdateLocalCopy)
|
|
|
|
|
|
ON_UPDATE_COMMAND_UI(IDT_REMOTE_COPY, OnUpdateRemoteCopy)
|
|
|
|
|
|
ON_UPDATE_COMMAND_UI(IDT_REMOTE_DELETE, OnUpdateRemoteDelete)
|
|
|
|
|
|
ON_UPDATE_COMMAND_UI(IDT_REMOTE_NEWFOLDER, OnUpdateRemoteNewfolder)
|
|
|
|
|
|
ON_UPDATE_COMMAND_UI(IDT_LOCAL_DELETE, OnUpdateLocalDelete)
|
|
|
|
|
|
ON_UPDATE_COMMAND_UI(IDT_LOCAL_NEWFOLDER, OnUpdateLocalNewfolder)
|
|
|
|
|
|
ON_COMMAND(IDT_REMOTE_COPY, OnRemoteCopy)
|
|
|
|
|
|
ON_COMMAND(IDT_LOCAL_COPY, OnLocalCopy)
|
|
|
|
|
|
ON_COMMAND(IDT_LOCAL_DELETE, OnLocalDelete)
|
|
|
|
|
|
ON_COMMAND(IDT_REMOTE_DELETE, OnRemoteDelete)
|
|
|
|
|
|
ON_COMMAND(IDT_REMOTE_STOP, OnRemoteStop)
|
|
|
|
|
|
ON_COMMAND(IDT_LOCAL_STOP, OnLocalStop)
|
|
|
|
|
|
ON_COMMAND(IDT_LOCAL_NEWFOLDER, OnLocalNewfolder)
|
|
|
|
|
|
ON_COMMAND(IDT_REMOTE_NEWFOLDER, OnRemoteNewfolder)
|
|
|
|
|
|
ON_COMMAND(IDM_TRANSFER, OnTransfer)
|
|
|
|
|
|
ON_COMMAND(IDM_RENAME, OnRename)
|
|
|
|
|
|
ON_NOTIFY(LVN_ENDLABELEDIT, IDC_LIST_LOCAL, OnEndlabeleditListLocal)
|
|
|
|
|
|
ON_NOTIFY(LVN_ENDLABELEDIT, IDC_LIST_REMOTE, OnEndlabeleditListRemote)
|
|
|
|
|
|
ON_COMMAND(IDM_DELETE, OnDelete)
|
|
|
|
|
|
ON_COMMAND(IDM_NEWFOLDER, OnNewfolder)
|
|
|
|
|
|
ON_COMMAND(IDM_REFRESH, OnRefresh)
|
|
|
|
|
|
ON_COMMAND(IDM_LOCAL_OPEN, OnLocalOpen)
|
|
|
|
|
|
ON_COMMAND(IDM_REMOTE_OPEN_SHOW, OnRemoteOpenShow)
|
|
|
|
|
|
ON_COMMAND(IDM_REMOTE_OPEN_HIDE, OnRemoteOpenHide)
|
|
|
|
|
|
ON_NOTIFY(NM_RCLICK, IDC_LIST_LOCAL, OnRclickListLocal)
|
|
|
|
|
|
ON_NOTIFY(NM_RCLICK, IDC_LIST_REMOTE, OnRclickListRemote)
|
2021-03-14 19:54:52 +08:00
|
|
|
|
ON_MESSAGE(WM_MY_MESSAGE, OnMyMessage)
|
2019-01-06 21:18:26 +08:00
|
|
|
|
//}}AFX_MSG_MAP
|
2019-01-05 20:21:43 +08:00
|
|
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
// CFileManagerDlg message handlers
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
|
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
int GetIconIndex(LPCTSTR lpFileName, DWORD dwFileAttributes)
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2024-12-27 01:40:40 +08:00
|
|
|
|
SHFILEINFO sfi = {};
|
2019-01-06 21:18:26 +08:00
|
|
|
|
if (dwFileAttributes == INVALID_FILE_ATTRIBUTES)
|
|
|
|
|
|
dwFileAttributes = FILE_ATTRIBUTE_NORMAL;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
else
|
2019-01-06 21:18:26 +08:00
|
|
|
|
dwFileAttributes |= FILE_ATTRIBUTE_NORMAL;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
SHGetFileInfo
|
|
|
|
|
|
(
|
|
|
|
|
|
lpFileName,
|
|
|
|
|
|
dwFileAttributes,
|
|
|
|
|
|
&sfi,
|
|
|
|
|
|
sizeof(SHFILEINFO),
|
|
|
|
|
|
SHGFI_SYSICONINDEX | SHGFI_USEFILEATTRIBUTES
|
|
|
|
|
|
);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
return sfi.iIcon;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
BOOL CFileManagerDlg::OnInitDialog()
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
|
|
|
|
|
CDialog::OnInitDialog();
|
2019-01-06 21:18:26 +08:00
|
|
|
|
|
|
|
|
|
|
// TODO: Add extra initialization here
|
|
|
|
|
|
|
|
|
|
|
|
// Set the icon for this dialog. The framework does this automatically
|
|
|
|
|
|
// when the application's main window is not a dialog
|
|
|
|
|
|
SetIcon(m_hIcon, TRUE); // Set big icon
|
|
|
|
|
|
SetIcon(m_hIcon, FALSE); // Set small icon
|
|
|
|
|
|
|
|
|
|
|
|
RECT rect;
|
|
|
|
|
|
GetClientRect(&rect);
|
|
|
|
|
|
|
|
|
|
|
|
/*Ϊ<><CEAA><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵĴ<D3B5><C4B4><EFBFBD>*/
|
|
|
|
|
|
|
|
|
|
|
|
// һ<><D2BB>Ҫ<EFBFBD><D2AA><EFBFBD>幤<EFBFBD><E5B9A4><EFBFBD><EFBFBD>ID<49><44><EFBFBD><EFBFBD>ȻRepositionBars<72><73><EFBFBD><EFBFBD><EFBFBD>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
|
|
|
|
|
|
// ID <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>AFX_IDW_CONTROLBAR_FIRST AFX_IDW_CONTROLBAR_LAST
|
|
|
|
|
|
// <20><><EFBFBD>ع<EFBFBD><D8B9><EFBFBD><EFBFBD><EFBFBD> CBRS_TOP <20><><EFBFBD>ڹ<EFBFBD><DAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
|
|
|
|
|
|
if (!m_wndToolBar_Local.Create(this, WS_CHILD |
|
|
|
|
|
|
WS_VISIBLE | CBRS_ALIGN_ANY | CBRS_TOOLTIPS | CBRS_FLYBY, ID_LOCAL_TOOLBAR)
|
|
|
|
|
|
||!m_wndToolBar_Local.LoadToolBar(IDR_TOOLBAR1))
|
|
|
|
|
|
{
|
|
|
|
|
|
TRACE0("Failed to create toolbar ");
|
|
|
|
|
|
return -1; //Failed to create
|
|
|
|
|
|
}
|
|
|
|
|
|
m_wndToolBar_Local.ModifyStyle(0, TBSTYLE_FLAT); //Fix for WinXP
|
|
|
|
|
|
m_wndToolBar_Local.LoadTrueColorToolBar
|
2019-01-05 20:21:43 +08:00
|
|
|
|
(
|
2019-01-06 21:18:26 +08:00
|
|
|
|
24, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
IDB_TOOLBAR,
|
|
|
|
|
|
IDB_TOOLBAR,
|
|
|
|
|
|
IDB_TOOLBAR_DISABLE
|
2019-01-05 20:21:43 +08:00
|
|
|
|
);
|
2019-01-06 21:18:26 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ť
|
|
|
|
|
|
m_wndToolBar_Local.AddDropDownButton(this, IDT_LOCAL_VIEW, IDR_LOCAL_VIEW);
|
|
|
|
|
|
|
|
|
|
|
|
if (!m_wndToolBar_Remote.Create(this, WS_CHILD |
|
|
|
|
|
|
WS_VISIBLE | CBRS_ALIGN_ANY | CBRS_TOOLTIPS | CBRS_FLYBY, ID_REMOTE_TOOLBAR)
|
|
|
|
|
|
||!m_wndToolBar_Remote.LoadToolBar(IDR_TOOLBAR2))
|
|
|
|
|
|
{
|
|
|
|
|
|
TRACE0("Failed to create toolbar ");
|
|
|
|
|
|
return -1; //Failed to create
|
|
|
|
|
|
}
|
|
|
|
|
|
m_wndToolBar_Remote.ModifyStyle(0, TBSTYLE_FLAT); //Fix for WinXP
|
|
|
|
|
|
m_wndToolBar_Remote.LoadTrueColorToolBar
|
|
|
|
|
|
(
|
|
|
|
|
|
24, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
IDB_TOOLBAR,
|
|
|
|
|
|
IDB_TOOLBAR,
|
|
|
|
|
|
IDB_TOOLBAR_DISABLE
|
|
|
|
|
|
);
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ť
|
|
|
|
|
|
m_wndToolBar_Remote.AddDropDownButton(this, IDT_REMOTE_VIEW, IDR_REMOTE_VIEW);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
|
|
|
|
|
//<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2025-02-07 19:23:15 +08:00
|
|
|
|
UpdateWindowsPos();
|
2019-01-06 21:18:26 +08:00
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
|
|
|
|
|
|
CString str;
|
|
|
|
|
|
str.Format("%s - <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>",m_IPAddress);
|
|
|
|
|
|
SetWindowText(str);
|
|
|
|
|
|
|
|
|
|
|
|
// Ϊ<>б<EFBFBD><D0B1><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>ImageList
|
|
|
|
|
|
m_list_local.SetImageList(m_pImageList_Large, LVSIL_NORMAL);
|
|
|
|
|
|
m_list_local.SetImageList(m_pImageList_Small, LVSIL_SMALL);
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC>
|
|
|
|
|
|
if (!m_wndStatusBar.Create(this) ||
|
|
|
|
|
|
!m_wndStatusBar.SetIndicators(indicators,
|
|
|
|
|
|
sizeof(indicators)/sizeof(UINT)))
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
TRACE0("Failed to create status bar\n");
|
|
|
|
|
|
return -1; // fail to create
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
m_wndStatusBar.SetPaneInfo(0, m_wndStatusBar.GetItemID(0), SBPS_STRETCH, NULL);
|
|
|
|
|
|
m_wndStatusBar.SetPaneInfo(1, m_wndStatusBar.GetItemID(1), SBPS_NORMAL, 120);
|
|
|
|
|
|
m_wndStatusBar.SetPaneInfo(2, m_wndStatusBar.GetItemID(2), SBPS_NORMAL, 50);
|
|
|
|
|
|
RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0); //<2F><>ʾ״̬<D7B4><CCAC>
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
m_wndStatusBar.GetItemRect(1, &rect);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
m_ProgressCtrl = new CProgressCtrl;
|
2019-01-06 21:18:26 +08:00
|
|
|
|
m_ProgressCtrl->Create(PBS_SMOOTH | WS_VISIBLE, rect, &m_wndStatusBar, 1);
|
|
|
|
|
|
m_ProgressCtrl->SetRange(0, 100); //<2F><><EFBFBD>ý<EFBFBD><C3BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ
|
|
|
|
|
|
m_ProgressCtrl->SetPos(20); //<2F><><EFBFBD>ý<EFBFBD><C3BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰλ<C7B0><CEBB>
|
|
|
|
|
|
|
2025-06-09 03:36:10 +08:00
|
|
|
|
m_list_local.ModifyStyle(FALSE, LVS_REPORT);
|
|
|
|
|
|
m_list_remote.ModifyStyle(FALSE, LVS_REPORT);
|
2019-01-06 21:18:26 +08:00
|
|
|
|
FixedLocalDriveList();
|
|
|
|
|
|
FixedRemoteDriveList();
|
|
|
|
|
|
/////////////////////////////////////////////
|
|
|
|
|
|
//// Set up initial variables
|
|
|
|
|
|
m_bDragging = false;
|
|
|
|
|
|
m_nDragIndex = -1;
|
|
|
|
|
|
m_nDropIndex = -1;
|
|
|
|
|
|
CoInitialize(NULL);
|
|
|
|
|
|
SHAutoComplete(GetDlgItem(IDC_LOCAL_PATH)->GetWindow(GW_CHILD)->m_hWnd, SHACF_FILESYSTEM);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
|
|
|
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
2019-01-06 21:18:26 +08:00
|
|
|
|
// EXCEPTION: OCX Property Pages should return FALSE
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
void CFileManagerDlg::OnSize(UINT nType, int cx, int cy)
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
CDialog::OnSize(nType, cx, cy);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
// TODO: Add your message handler code here
|
|
|
|
|
|
// ״̬<D7B4><CCAC><EFBFBD><EFBFBD>û<EFBFBD>д<EFBFBD><D0B4><EFBFBD>
|
|
|
|
|
|
if (m_wndStatusBar.m_hWnd == NULL)
|
|
|
|
|
|
return;
|
|
|
|
|
|
// <20><>λ״̬<D7B4><CCAC>
|
|
|
|
|
|
RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0); //<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
RECT rect;
|
|
|
|
|
|
m_wndStatusBar.GetItemRect(1, &rect);
|
|
|
|
|
|
m_ProgressCtrl->MoveWindow(&rect);
|
|
|
|
|
|
|
2025-02-07 19:23:15 +08:00
|
|
|
|
UpdateWindowsPos();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CFileManagerDlg::UpdateWindowsPos() {
|
|
|
|
|
|
RECT rect;
|
|
|
|
|
|
GetClientRect(&rect);
|
|
|
|
|
|
int cx = rect.right - rect.left;
|
|
|
|
|
|
int cy = rect.bottom - rect.top;
|
2019-01-06 21:18:26 +08:00
|
|
|
|
GetDlgItem(IDC_LIST_LOCAL)->MoveWindow(0, 36, cx, (cy - 100) / 2);
|
|
|
|
|
|
GetDlgItem(IDC_LIST_REMOTE)->MoveWindow(0, (cy / 2) + 28, cx, (cy - 100) / 2);
|
2025-02-07 19:23:15 +08:00
|
|
|
|
GetDlgItem(IDC_STATIC_LOCAL)->MoveWindow(10, 10, 25 * m_fScalingFactor, 20);
|
|
|
|
|
|
GetDlgItem(IDC_STATIC_REMOTE)->MoveWindow(10, cy / 2, 25 * m_fScalingFactor, 20);
|
|
|
|
|
|
GetDlgItem(IDC_LOCAL_PATH)->MoveWindow(56, 5, 210, 12);
|
|
|
|
|
|
GetDlgItem(IDC_REMOTE_PATH)->MoveWindow(56, (cy / 2) - 4, 210, 12);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
//<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2025-02-07 19:23:15 +08:00
|
|
|
|
m_wndToolBar_Local.MoveWindow(268, 0, (rect.right - 268), 48);
|
|
|
|
|
|
m_wndToolBar_Remote.MoveWindow(268, (rect.bottom / 2 - 10), (rect.right - 268), 48);
|
2019-01-06 21:18:26 +08:00
|
|
|
|
}
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
void CFileManagerDlg::FixedLocalDriveList()
|
|
|
|
|
|
{
|
|
|
|
|
|
char DriveString[256];
|
|
|
|
|
|
char *pDrive = NULL;
|
|
|
|
|
|
m_list_local.DeleteAllItems();
|
|
|
|
|
|
while(m_list_local.DeleteColumn(0) != 0);
|
|
|
|
|
|
m_list_local.InsertColumn(0, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", LVCFMT_LEFT, 200);
|
|
|
|
|
|
m_list_local.InsertColumn(1, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", LVCFMT_LEFT, 100);
|
|
|
|
|
|
m_list_local.InsertColumn(2, "<EFBFBD>ܴ<EFBFBD>С", LVCFMT_LEFT, 100);
|
|
|
|
|
|
m_list_local.InsertColumn(3, "<EFBFBD><EFBFBD><EFBFBD>ÿռ<EFBFBD>", LVCFMT_LEFT, 115);
|
|
|
|
|
|
|
|
|
|
|
|
GetLogicalDriveStrings(sizeof(DriveString), DriveString);
|
|
|
|
|
|
pDrive = DriveString;
|
|
|
|
|
|
|
|
|
|
|
|
char FileSystem[MAX_PATH];
|
|
|
|
|
|
unsigned __int64 HDAmount = 0;
|
|
|
|
|
|
unsigned __int64 HDFreeSpace = 0;
|
|
|
|
|
|
unsigned long AmntMB = 0; // <20>ܴ<EFBFBD>С
|
|
|
|
|
|
unsigned long FreeMB = 0; // ʣ<><CAA3><EFBFBD>ռ<EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
for (int i = 0; *pDrive != '\0'; i++, pDrive += lstrlen(pDrive) + 1)
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
|
|
|
|
|
// <20>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
2019-01-06 21:18:26 +08:00
|
|
|
|
memset(FileSystem, 0, sizeof(FileSystem));
|
2019-01-05 20:21:43 +08:00
|
|
|
|
// <20>õ<EFBFBD><C3B5>ļ<EFBFBD>ϵͳ<CFB5><CDB3>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>С
|
2019-01-06 21:18:26 +08:00
|
|
|
|
GetVolumeInformation(pDrive, NULL, 0, NULL, NULL, NULL, FileSystem, MAX_PATH);
|
|
|
|
|
|
|
|
|
|
|
|
int nFileSystemLen = lstrlen(FileSystem) + 1;
|
|
|
|
|
|
if (GetDiskFreeSpaceEx(pDrive, (PULARGE_INTEGER)&HDFreeSpace, (PULARGE_INTEGER)&HDAmount, NULL))
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
AmntMB = HDAmount / 1024 / 1024;
|
|
|
|
|
|
FreeMB = HDFreeSpace / 1024 / 1024;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
AmntMB = 0;
|
|
|
|
|
|
FreeMB = 0;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
int nItem = m_list_local.InsertItem(i, pDrive, GetIconIndex(pDrive, GetFileAttributes(pDrive)));
|
|
|
|
|
|
m_list_local.SetItemData(nItem, 1);
|
|
|
|
|
|
if (lstrlen(FileSystem) == 0)
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2024-12-27 01:40:40 +08:00
|
|
|
|
SHFILEINFO sfi = {};
|
2019-01-06 21:18:26 +08:00
|
|
|
|
SHGetFileInfo(pDrive, FILE_ATTRIBUTE_NORMAL, &sfi,sizeof(SHFILEINFO), SHGFI_TYPENAME | SHGFI_USEFILEATTRIBUTES);
|
|
|
|
|
|
m_list_local.SetItemText(nItem, 1, sfi.szTypeName);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
m_list_local.SetItemText(nItem, 1, FileSystem);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
2019-01-06 21:18:26 +08:00
|
|
|
|
CString str;
|
|
|
|
|
|
str.Format("%10.1f GB", (float)AmntMB / 1024);
|
|
|
|
|
|
m_list_local.SetItemText(nItem, 2, str);
|
|
|
|
|
|
str.Format("%10.1f GB", (float)FreeMB / 1024);
|
|
|
|
|
|
m_list_local.SetItemText(nItem, 3, str);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
2019-01-06 21:18:26 +08:00
|
|
|
|
// <20><><EFBFBD>ñ<EFBFBD><C3B1>ص<EFBFBD>ǰ·<C7B0><C2B7>
|
|
|
|
|
|
m_Local_Path = "";
|
|
|
|
|
|
m_Local_Directory_ComboBox.ResetContent();
|
|
|
|
|
|
|
|
|
|
|
|
ShowMessage("<EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD>װ<EFBFBD><EFBFBD>Ŀ¼ %s <20><><EFBFBD><EFBFBD>", m_Local_Path);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
void CFileManagerDlg::OnDblclkListLocal(NMHDR* pNMHDR, LRESULT* pResult)
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
// TODO: Add your control notification handler code here
|
|
|
|
|
|
if (m_list_local.GetSelectedCount() == 0 || m_list_local.GetItemData(m_list_local.GetSelectionMark()) != 1)
|
2019-01-05 20:21:43 +08:00
|
|
|
|
return;
|
2019-01-06 21:18:26 +08:00
|
|
|
|
FixedLocalFileList();
|
2019-01-05 20:21:43 +08:00
|
|
|
|
*pResult = 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
void CFileManagerDlg::FixedLocalFileList(CString directory)
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
if (directory.GetLength() == 0)
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
int nItem = m_list_local.GetSelectionMark();
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD>еģ<D0B5><C4A3><EFBFBD>Ŀ¼
|
2019-01-06 21:18:26 +08:00
|
|
|
|
if (nItem != -1)
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
if (m_list_local.GetItemData(nItem) == 1)
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
directory = m_list_local.GetItemText(nItem, 0);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD>õ<EFBFBD>·<EFBFBD><C2B7>
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
m_Local_Directory_ComboBox.GetWindowText(m_Local_Path);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
// <20>õ<EFBFBD><C3B5><EFBFBD>Ŀ¼
|
|
|
|
|
|
if (directory == "..")
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
m_Local_Path = GetParentDirectory(m_Local_Path);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
// ˢ<>µ<EFBFBD>ǰ<EFBFBD><C7B0>
|
2019-01-06 21:18:26 +08:00
|
|
|
|
else if (directory != ".")
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
m_Local_Path += directory;
|
|
|
|
|
|
if(m_Local_Path.Right(1) != "\\")
|
|
|
|
|
|
m_Local_Path += "\\";
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD>Ŀ¼,<2C><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD>б<EFBFBD>
|
2019-01-06 21:18:26 +08:00
|
|
|
|
if (m_Local_Path.GetLength() == 0)
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
FixedLocalDriveList();
|
2019-01-05 20:21:43 +08:00
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
m_Local_Directory_ComboBox.InsertString(0, m_Local_Path);
|
|
|
|
|
|
m_Local_Directory_ComboBox.SetCurSel(0);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
// <20>ؽ<EFBFBD><D8BD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
m_list_local.DeleteAllItems();
|
|
|
|
|
|
while(m_list_local.DeleteColumn(0) != 0);
|
|
|
|
|
|
m_list_local.InsertColumn(0, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", LVCFMT_LEFT, 200);
|
|
|
|
|
|
m_list_local.InsertColumn(1, "<EFBFBD><EFBFBD>С", LVCFMT_LEFT, 100);
|
|
|
|
|
|
m_list_local.InsertColumn(2, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", LVCFMT_LEFT, 100);
|
|
|
|
|
|
m_list_local.InsertColumn(3, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", LVCFMT_LEFT, 115);
|
|
|
|
|
|
|
|
|
|
|
|
int nItemIndex = 0;
|
|
|
|
|
|
m_list_local.SetItemData
|
|
|
|
|
|
(
|
|
|
|
|
|
m_list_local.InsertItem(nItemIndex++, "..", GetIconIndex(NULL, FILE_ATTRIBUTE_DIRECTORY)),
|
|
|
|
|
|
1
|
|
|
|
|
|
);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
|
|
|
|
|
// i Ϊ 0 ʱ<><CAB1>Ŀ¼<C4BF><C2BC>i Ϊ 1ʱ<31><CAB1><EFBFBD>ļ<EFBFBD>
|
2019-01-18 17:37:15 +08:00
|
|
|
|
for (int i = 0; i < 2; ++i)
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
CFileFind file;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
BOOL bContinue;
|
2019-01-06 21:18:26 +08:00
|
|
|
|
bContinue = file.FindFile(m_Local_Path + "*.*");
|
2019-01-05 20:21:43 +08:00
|
|
|
|
while (bContinue)
|
|
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
bContinue = file.FindNextFile();
|
|
|
|
|
|
if (file.IsDots())
|
2019-01-05 20:21:43 +08:00
|
|
|
|
continue;
|
2019-01-06 21:18:26 +08:00
|
|
|
|
bool bIsInsert = !file.IsDirectory() == i;
|
|
|
|
|
|
|
2019-01-05 20:21:43 +08:00
|
|
|
|
if (!bIsInsert)
|
|
|
|
|
|
continue;
|
|
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
int nItem = m_list_local.InsertItem(nItemIndex++, file.GetFileName(),
|
|
|
|
|
|
GetIconIndex(file.GetFileName(), GetFileAttributes(file.GetFilePath())));
|
|
|
|
|
|
m_list_local.SetItemData(nItem, file.IsDirectory());
|
2024-12-27 01:40:40 +08:00
|
|
|
|
SHFILEINFO sfi = {};
|
2019-01-06 21:18:26 +08:00
|
|
|
|
SHGetFileInfo(file.GetFileName(), FILE_ATTRIBUTE_NORMAL, &sfi,sizeof(SHFILEINFO), SHGFI_TYPENAME | SHGFI_USEFILEATTRIBUTES);
|
|
|
|
|
|
m_list_local.SetItemText(nItem, 2, sfi.szTypeName);
|
|
|
|
|
|
|
|
|
|
|
|
CString str;
|
|
|
|
|
|
str.Format("%10d KB", file.GetLength() / 1024 + (file.GetLength() % 1024 ? 1 : 0));
|
|
|
|
|
|
m_list_local.SetItemText(nItem, 1, str);
|
|
|
|
|
|
CTime time;
|
|
|
|
|
|
file.GetLastWriteTime(time);
|
|
|
|
|
|
m_list_local.SetItemText(nItem, 3, time.Format("%Y-%m-%d %H:%M"));
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
2019-01-06 21:18:26 +08:00
|
|
|
|
|
|
|
|
|
|
ShowMessage("<EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD>װ<EFBFBD><EFBFBD>Ŀ¼ %s <20><><EFBFBD><EFBFBD>", m_Local_Path);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
void CFileManagerDlg::DropItemOnList(CListCtrl* pDragList, CListCtrl* pDropList)
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
//This routine performs the actual drop of the item dragged.
|
|
|
|
|
|
//It simply grabs the info from the Drag list (pDragList)
|
|
|
|
|
|
// and puts that info into the list dropped on (pDropList).
|
|
|
|
|
|
//Send: pDragList = pointer to CListCtrl we dragged from,
|
|
|
|
|
|
// pDropList = pointer to CListCtrl we are dropping on.
|
|
|
|
|
|
//Return: nothing.
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
////Variables
|
|
|
|
|
|
// Unhilight the drop target
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
if(pDragList == pDropList) //we are return
|
|
|
|
|
|
{
|
|
|
|
|
|
return;
|
|
|
|
|
|
} //EO if(pDragList...
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
pDropList->SetItemState(m_nDropIndex, 0, LVIS_DROPHILITED);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
if ((CWnd *)pDropList == &m_list_local)
|
|
|
|
|
|
{
|
|
|
|
|
|
OnRemoteCopy();
|
|
|
|
|
|
}
|
|
|
|
|
|
else if ((CWnd *)pDropList == &m_list_remote)
|
|
|
|
|
|
{
|
|
|
|
|
|
OnLocalCopy();
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>
|
|
|
|
|
|
m_nDropIndex = -1;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
// The system calls this to obtain the cursor to display while the user drags
|
|
|
|
|
|
// the minimized window.
|
|
|
|
|
|
HCURSOR CFileManagerDlg::OnQueryDragIcon()
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
return (HCURSOR) m_hIcon;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
void CFileManagerDlg::OnBegindragListLocal(NMHDR* pNMHDR, LRESULT* pResult)
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
|
|
|
|
|
|
// TODO: Add your control notification handler code here
|
|
|
|
|
|
//// Save the index of the item being dragged in m_nDragIndex
|
|
|
|
|
|
//// This will be used later for retrieving the info dragged
|
|
|
|
|
|
m_nDragIndex = pNMListView->iItem;
|
|
|
|
|
|
|
|
|
|
|
|
if (!m_list_local.GetItemText(m_nDragIndex, 0).Compare(".."))
|
2019-01-05 20:21:43 +08:00
|
|
|
|
return;
|
|
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
//We will call delete later (in LButtonUp) to clean this up
|
|
|
|
|
|
|
|
|
|
|
|
if(m_list_local.GetSelectedCount() > 1) //more than 1 item in list is selected
|
2025-03-30 20:11:01 +08:00
|
|
|
|
m_hCursor = AfxGetApp()->LoadCursor(IDC_CURSOR_MDRAG);
|
2019-01-06 21:18:26 +08:00
|
|
|
|
else
|
2025-03-30 20:11:01 +08:00
|
|
|
|
m_hCursor = AfxGetApp()->LoadCursor(IDC_CURSOR_DRAG);
|
2019-01-06 21:18:26 +08:00
|
|
|
|
|
|
|
|
|
|
ASSERT(m_hCursor); //make sure it was created
|
|
|
|
|
|
//// Change the cursor to the drag image
|
|
|
|
|
|
//// (still must perform DragMove() in OnMouseMove() to show it moving)
|
|
|
|
|
|
|
|
|
|
|
|
//// Set dragging flag and others
|
|
|
|
|
|
m_bDragging = TRUE; //we are in a drag and drop operation
|
|
|
|
|
|
m_nDropIndex = -1; //we don't have a drop index yet
|
|
|
|
|
|
m_pDragList = &m_list_local; //make note of which list we are dragging from
|
|
|
|
|
|
m_pDropWnd = &m_list_local; //at present the drag list is the drop list
|
|
|
|
|
|
|
|
|
|
|
|
//// Capture all mouse messages
|
|
|
|
|
|
SetCapture();
|
2019-01-05 20:21:43 +08:00
|
|
|
|
*pResult = 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
void CFileManagerDlg::OnBegindragListRemote(NMHDR* pNMHDR, LRESULT* pResult)
|
|
|
|
|
|
{
|
|
|
|
|
|
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
|
|
|
|
|
|
// TODO: Add your control notification handler code here
|
|
|
|
|
|
//// Save the index of the item being dragged in m_nDragIndex
|
|
|
|
|
|
//// This will be used later for retrieving the info dragged
|
|
|
|
|
|
m_nDragIndex = pNMListView->iItem;
|
|
|
|
|
|
if (!m_list_local.GetItemText(m_nDragIndex, 0).Compare(".."))
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
|
|
//We will call delete later (in LButtonUp) to clean this up
|
|
|
|
|
|
|
|
|
|
|
|
if(m_list_remote.GetSelectedCount() > 1) //more than 1 item in list is selected
|
2025-03-30 20:11:01 +08:00
|
|
|
|
m_hCursor = AfxGetApp()->LoadCursor(IDC_CURSOR_MDRAG);
|
2019-01-06 21:18:26 +08:00
|
|
|
|
else
|
2025-03-30 20:11:01 +08:00
|
|
|
|
m_hCursor = AfxGetApp()->LoadCursor(IDC_CURSOR_DRAG);
|
2019-01-06 21:18:26 +08:00
|
|
|
|
|
|
|
|
|
|
ASSERT(m_hCursor); //make sure it was created
|
|
|
|
|
|
//// Change the cursor to the drag image
|
|
|
|
|
|
//// (still must perform DragMove() in OnMouseMove() to show it moving)
|
|
|
|
|
|
|
|
|
|
|
|
//// Set dragging flag and others
|
|
|
|
|
|
m_bDragging = TRUE; //we are in a drag and drop operation
|
|
|
|
|
|
m_nDropIndex = -1; //we don't have a drop index yet
|
|
|
|
|
|
m_pDragList = &m_list_remote; //make note of which list we are dragging from
|
|
|
|
|
|
m_pDropWnd = &m_list_remote; //at present the drag list is the drop list
|
|
|
|
|
|
|
|
|
|
|
|
//// Capture all mouse messages
|
|
|
|
|
|
SetCapture ();
|
|
|
|
|
|
*pResult = 0;
|
|
|
|
|
|
}
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
void CFileManagerDlg::OnMouseMove(UINT nFlags, CPoint point)
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
// TODO: Add your message handler code here and/or call default
|
|
|
|
|
|
//While the mouse is moving, this routine is called.
|
|
|
|
|
|
//This routine will redraw the drag image at the present
|
|
|
|
|
|
// mouse location to display the dragging.
|
|
|
|
|
|
//Also, while over a CListCtrl, this routine will highlight
|
|
|
|
|
|
// the item we are hovering over.
|
|
|
|
|
|
|
|
|
|
|
|
//// If we are in a drag/drop procedure (m_bDragging is true)
|
|
|
|
|
|
if (m_bDragging)
|
|
|
|
|
|
{
|
|
|
|
|
|
//SetClassLong(m_list_local.m_hWnd, GCL_HCURSOR, (LONG)AfxGetApp()->LoadCursor(IDC_DRAG));
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
//// Move the drag image
|
|
|
|
|
|
CPoint pt(point); //get our current mouse coordinates
|
|
|
|
|
|
ClientToScreen(&pt); //convert to screen coordinates
|
|
|
|
|
|
|
|
|
|
|
|
//// Get the CWnd pointer of the window that is under the mouse cursor
|
|
|
|
|
|
CWnd* pDropWnd = WindowFromPoint (pt);
|
|
|
|
|
|
|
|
|
|
|
|
ASSERT(pDropWnd); //make sure we have a window
|
|
|
|
|
|
|
|
|
|
|
|
//// If we drag outside current window we need to adjust the highlights displayed
|
|
|
|
|
|
if (pDropWnd != m_pDropWnd)
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
if (m_nDropIndex != -1) //If we drag over the CListCtrl header, turn off the hover highlight
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
TRACE("m_nDropIndex is -1\n");
|
|
|
|
|
|
CListCtrl* pList = (CListCtrl*)m_pDropWnd;
|
|
|
|
|
|
VERIFY (pList->SetItemState (m_nDropIndex, 0, LVIS_DROPHILITED));
|
|
|
|
|
|
// redraw item
|
|
|
|
|
|
VERIFY (pList->RedrawItems (m_nDropIndex, m_nDropIndex));
|
|
|
|
|
|
pList->UpdateWindow ();
|
|
|
|
|
|
m_nDropIndex = -1;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
2019-01-06 21:18:26 +08:00
|
|
|
|
|
|
|
|
|
|
// Save current window pointer as the CListCtrl we are dropping onto
|
|
|
|
|
|
m_pDropWnd = pDropWnd;
|
|
|
|
|
|
|
|
|
|
|
|
// Convert from screen coordinates to drop target client coordinates
|
|
|
|
|
|
pDropWnd->ScreenToClient(&pt);
|
|
|
|
|
|
|
|
|
|
|
|
//If we are hovering over a CListCtrl we need to adjust the highlights
|
|
|
|
|
|
if(pDropWnd->IsKindOf(RUNTIME_CLASS (CListCtrl)))
|
|
|
|
|
|
{
|
|
|
|
|
|
//Note that we can drop here
|
|
|
|
|
|
SetCursor(m_hCursor);
|
|
|
|
|
|
|
|
|
|
|
|
if (m_pDropWnd->m_hWnd == m_pDragList->m_hWnd)
|
|
|
|
|
|
return;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
UINT uFlags;
|
|
|
|
|
|
CListCtrl* pList = (CListCtrl*)pDropWnd;
|
|
|
|
|
|
|
|
|
|
|
|
// Turn off hilight for previous drop target
|
|
|
|
|
|
pList->SetItemState (m_nDropIndex, 0, LVIS_DROPHILITED);
|
|
|
|
|
|
// Redraw previous item
|
|
|
|
|
|
pList->RedrawItems (m_nDropIndex, m_nDropIndex);
|
|
|
|
|
|
|
|
|
|
|
|
// Get the item that is below cursor
|
|
|
|
|
|
m_nDropIndex = ((CListCtrl*)pDropWnd)->HitTest(pt, &uFlags);
|
|
|
|
|
|
if (m_nDropIndex != -1)
|
|
|
|
|
|
{
|
|
|
|
|
|
// Highlight it
|
|
|
|
|
|
pList->SetItemState(m_nDropIndex, LVIS_DROPHILITED, LVIS_DROPHILITED);
|
|
|
|
|
|
// Redraw item
|
|
|
|
|
|
pList->RedrawItems(m_nDropIndex, m_nDropIndex);
|
|
|
|
|
|
pList->UpdateWindow();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
//If we are not hovering over a CListCtrl, change the cursor
|
|
|
|
|
|
// to note that we cannot drop here
|
|
|
|
|
|
SetCursor(LoadCursor(NULL, IDC_NO));
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
2019-01-06 21:18:26 +08:00
|
|
|
|
}
|
|
|
|
|
|
CDialog::OnMouseMove(nFlags, point);
|
|
|
|
|
|
}
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
void CFileManagerDlg::OnLButtonUp(UINT nFlags, CPoint point)
|
|
|
|
|
|
{
|
|
|
|
|
|
// TODO: Add your message handler code here and/or call default
|
|
|
|
|
|
//This routine is the end of the drag/drop operation.
|
|
|
|
|
|
//When the button is released, we are to drop the item.
|
|
|
|
|
|
//There are a few things we need to do to clean up and
|
|
|
|
|
|
// finalize the drop:
|
|
|
|
|
|
// 1) Release the mouse capture
|
|
|
|
|
|
// 2) Set m_bDragging to false to signify we are not dragging
|
|
|
|
|
|
// 3) Actually drop the item (we call a separate function to do that)
|
|
|
|
|
|
|
|
|
|
|
|
//If we are in a drag and drop operation (otherwise we don't do anything)
|
|
|
|
|
|
if (m_bDragging)
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
// Release mouse capture, so that other controls can get control/messages
|
|
|
|
|
|
ReleaseCapture();
|
|
|
|
|
|
|
|
|
|
|
|
// Note that we are NOT in a drag operation
|
|
|
|
|
|
m_bDragging = FALSE;
|
|
|
|
|
|
|
|
|
|
|
|
CPoint pt (point); //Get current mouse coordinates
|
|
|
|
|
|
ClientToScreen (&pt); //Convert to screen coordinates
|
|
|
|
|
|
// Get the CWnd pointer of the window that is under the mouse cursor
|
|
|
|
|
|
CWnd* pDropWnd = WindowFromPoint (pt);
|
|
|
|
|
|
ASSERT (pDropWnd); //make sure we have a window pointer
|
|
|
|
|
|
// If window is CListCtrl, we perform the drop
|
|
|
|
|
|
if (pDropWnd->IsKindOf (RUNTIME_CLASS (CListCtrl)))
|
|
|
|
|
|
{
|
|
|
|
|
|
m_pDropList = (CListCtrl*)pDropWnd; //Set pointer to the list we are dropping on
|
|
|
|
|
|
DropItemOnList(m_pDragList, m_pDropList); //Call routine to perform the actual drop
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
CDialog::OnLButtonUp(nFlags, point);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
BOOL CFileManagerDlg::PreTranslateMessage(MSG* pMsg)
|
|
|
|
|
|
{
|
|
|
|
|
|
// TODO: Add your specialized code here and/or call the base class
|
|
|
|
|
|
if (pMsg->message == WM_KEYDOWN)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (pMsg->wParam == VK_ESCAPE)
|
|
|
|
|
|
return true;
|
|
|
|
|
|
if (pMsg->wParam == VK_RETURN)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (
|
|
|
|
|
|
pMsg->hwnd == m_list_local.m_hWnd ||
|
|
|
|
|
|
pMsg->hwnd == ((CEdit*)m_Local_Directory_ComboBox.GetWindow(GW_CHILD))->m_hWnd
|
|
|
|
|
|
)
|
|
|
|
|
|
{
|
|
|
|
|
|
FixedLocalFileList();
|
|
|
|
|
|
}
|
|
|
|
|
|
else if
|
|
|
|
|
|
(
|
|
|
|
|
|
pMsg->hwnd == m_list_remote.m_hWnd ||
|
|
|
|
|
|
pMsg->hwnd == ((CEdit*)m_Remote_Directory_ComboBox.GetWindow(GW_CHILD))->m_hWnd
|
|
|
|
|
|
)
|
|
|
|
|
|
{
|
|
|
|
|
|
GetRemoteFileList();
|
|
|
|
|
|
}
|
|
|
|
|
|
return TRUE;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˴<EFBFBD><CBB4>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD>
|
|
|
|
|
|
if (pMsg->message == WM_LBUTTONDOWN && pMsg->hwnd == m_hWnd)
|
|
|
|
|
|
{
|
|
|
|
|
|
pMsg->message = WM_NCLBUTTONDOWN;
|
|
|
|
|
|
pMsg->wParam = HTCAPTION;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
2019-01-06 21:18:26 +08:00
|
|
|
|
/*
|
|
|
|
|
|
UINT CFileManagerDlg::OnNcHitTest (Cpoint point )
|
|
|
|
|
|
{
|
|
|
|
|
|
UINT nHitTest =Cdialog: : OnNcHitTest (point )
|
|
|
|
|
|
return (nHitTest = =HTCLIENT)? HTCAPTION : nHitTest
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㲻<EFBFBD><EFBFBD>֮<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD>ڵĿͻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˫<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʺϰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڡ<EFBFBD>
|
|
|
|
|
|
*/
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
if(m_wndToolBar_Local.IsWindowVisible())
|
|
|
|
|
|
{
|
|
|
|
|
|
CWnd* pWndParent = m_wndToolBar_Local.GetParent();
|
|
|
|
|
|
m_wndToolBar_Local.OnUpdateCmdUI((CFrameWnd*)this, TRUE);
|
|
|
|
|
|
}
|
|
|
|
|
|
if(m_wndToolBar_Remote.IsWindowVisible())
|
|
|
|
|
|
{
|
|
|
|
|
|
CWnd* pWndParent = m_wndToolBar_Remote.GetParent();
|
|
|
|
|
|
m_wndToolBar_Remote.OnUpdateCmdUI((CFrameWnd*)this, TRUE);
|
|
|
|
|
|
}
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
return CDialog::PreTranslateMessage(pMsg);
|
|
|
|
|
|
}
|
2019-01-12 18:21:42 +08:00
|
|
|
|
|
2025-02-06 03:34:57 +08:00
|
|
|
|
void CFileManagerDlg::OnTimer(UINT_PTR nIDEvent)
|
2019-01-06 21:18:26 +08:00
|
|
|
|
{
|
|
|
|
|
|
// TODO: Add your message handler code here and/or call default
|
|
|
|
|
|
m_ProgressCtrl->StepIt();
|
|
|
|
|
|
CDialog::OnTimer(nIDEvent);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
void CFileManagerDlg::FixedRemoteDriveList()
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD>ϵͳͳͼ<CDB3><CDBC><EFBFBD>б<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>б<EFBFBD>
|
|
|
|
|
|
HIMAGELIST hImageListLarge = NULL;
|
|
|
|
|
|
HIMAGELIST hImageListSmall = NULL;
|
|
|
|
|
|
Shell_GetImageLists(&hImageListLarge, &hImageListSmall);
|
|
|
|
|
|
ListView_SetImageList(m_list_remote.m_hWnd, hImageListLarge, LVSIL_NORMAL);
|
|
|
|
|
|
ListView_SetImageList(m_list_remote.m_hWnd, hImageListSmall, LVSIL_SMALL);
|
|
|
|
|
|
|
|
|
|
|
|
m_list_remote.DeleteAllItems();
|
|
|
|
|
|
// <20>ؽ<EFBFBD>Column
|
|
|
|
|
|
while(m_list_remote.DeleteColumn(0) != 0);
|
|
|
|
|
|
m_list_remote.InsertColumn(0, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", LVCFMT_LEFT, 200);
|
|
|
|
|
|
m_list_remote.InsertColumn(1, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", LVCFMT_LEFT, 100);
|
|
|
|
|
|
m_list_remote.InsertColumn(2, "<EFBFBD>ܴ<EFBFBD>С", LVCFMT_LEFT, 100);
|
|
|
|
|
|
m_list_remote.InsertColumn(3, "<EFBFBD><EFBFBD><EFBFBD>ÿռ<EFBFBD>", LVCFMT_LEFT, 115);
|
|
|
|
|
|
|
|
|
|
|
|
char *pDrive = NULL;
|
|
|
|
|
|
pDrive = (char *)m_bRemoteDriveList;
|
|
|
|
|
|
|
|
|
|
|
|
unsigned long AmntMB = 0; // <20>ܴ<EFBFBD>С
|
|
|
|
|
|
unsigned long FreeMB = 0; // ʣ<><CAA3><EFBFBD>ռ<EFBFBD>
|
2019-01-12 18:21:42 +08:00
|
|
|
|
//char VolName[MAX_PATH];
|
|
|
|
|
|
//char FileSystem[MAX_PATH];
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
/*
|
|
|
|
|
|
6 DRIVE_FLOPPY
|
|
|
|
|
|
7 DRIVE_REMOVABLE
|
|
|
|
|
|
8 DRIVE_FIXED
|
|
|
|
|
|
9 DRIVE_REMOTE
|
|
|
|
|
|
10 DRIVE_REMOTE_DISCONNECT
|
|
|
|
|
|
11 DRIVE_CDROM
|
|
|
|
|
|
*/
|
|
|
|
|
|
int nIconIndex = -1;
|
|
|
|
|
|
for (int i = 0; pDrive[i] != '\0';)
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
if (pDrive[i] == 'A' || pDrive[i] == 'B')
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
nIconIndex = 6;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
2019-01-06 21:18:26 +08:00
|
|
|
|
else
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
switch (pDrive[i + 1])
|
|
|
|
|
|
{
|
|
|
|
|
|
case DRIVE_REMOVABLE:
|
|
|
|
|
|
nIconIndex = 7;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case DRIVE_FIXED:
|
|
|
|
|
|
nIconIndex = 8;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case DRIVE_REMOTE:
|
|
|
|
|
|
nIconIndex = 9;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case DRIVE_CDROM:
|
|
|
|
|
|
nIconIndex = 11;
|
|
|
|
|
|
break;
|
|
|
|
|
|
default:
|
|
|
|
|
|
nIconIndex = 8;
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
CString str;
|
|
|
|
|
|
str.Format("%c:\\", pDrive[i]);
|
|
|
|
|
|
int nItem = m_list_remote.InsertItem(i, str, nIconIndex);
|
|
|
|
|
|
m_list_remote.SetItemData(nItem, 1);
|
|
|
|
|
|
|
|
|
|
|
|
memcpy(&AmntMB, pDrive + i + 2, 4);
|
|
|
|
|
|
memcpy(&FreeMB, pDrive + i + 6, 4);
|
|
|
|
|
|
str.Format("%10.1f GB", (float)AmntMB / 1024);
|
|
|
|
|
|
m_list_remote.SetItemText(nItem, 2, str);
|
|
|
|
|
|
str.Format("%10.1f GB", (float)FreeMB / 1024);
|
|
|
|
|
|
m_list_remote.SetItemText(nItem, 3, str);
|
|
|
|
|
|
|
|
|
|
|
|
i += 10;
|
|
|
|
|
|
|
|
|
|
|
|
char *lpFileSystemName = NULL;
|
|
|
|
|
|
char *lpTypeName = NULL;
|
|
|
|
|
|
|
|
|
|
|
|
lpTypeName = pDrive + i;
|
|
|
|
|
|
i += lstrlen(pDrive + i) + 1;
|
|
|
|
|
|
lpFileSystemName = pDrive + i;
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, Ϊ<>վ<EFBFBD><D5BE><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
if (lstrlen(lpFileSystemName) == 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_list_remote.SetItemText(nItem, 1, lpTypeName);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
2019-01-06 21:18:26 +08:00
|
|
|
|
else
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
m_list_remote.SetItemText(nItem, 1, lpFileSystemName);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
2019-01-06 21:18:26 +08:00
|
|
|
|
|
|
|
|
|
|
i += lstrlen(pDrive + i) + 1;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
2019-01-06 21:18:26 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD>Զ<EFBFBD>̵<EFBFBD>ǰ·<C7B0><C2B7>
|
|
|
|
|
|
m_Remote_Path = "";
|
|
|
|
|
|
m_Remote_Directory_ComboBox.ResetContent();
|
|
|
|
|
|
|
|
|
|
|
|
ShowMessage("Զ<EFBFBD>̣<EFBFBD>װ<EFBFBD><EFBFBD>Ŀ¼ %s <20><><EFBFBD><EFBFBD>", m_Remote_Path);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
void CFileManagerDlg::OnClose()
|
|
|
|
|
|
{
|
|
|
|
|
|
// TODO: Add your message handler code here and/or call default
|
|
|
|
|
|
CoUninitialize();
|
2019-01-13 13:13:59 +08:00
|
|
|
|
|
|
|
|
|
|
#if CLOSE_DELETE_DLG
|
|
|
|
|
|
m_pContext->v1 = 0;
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
closesocket(m_pContext->m_Socket);
|
|
|
|
|
|
|
|
|
|
|
|
CDialog::OnClose();
|
2019-01-11 21:40:11 +08:00
|
|
|
|
m_bIsClosed = true;
|
2019-01-13 13:13:59 +08:00
|
|
|
|
#if CLOSE_DELETE_DLG
|
2019-01-11 21:40:11 +08:00
|
|
|
|
//delete this; //<2F>˴<EFBFBD><CBB4>ͷ<EFBFBD><CDB7>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>ڵ<EFBFBD>2<EFBFBD>α<EFBFBD><CEB1><EFBFBD>
|
2019-01-13 13:13:59 +08:00
|
|
|
|
#endif
|
2019-01-06 21:18:26 +08:00
|
|
|
|
}
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
CString CFileManagerDlg::GetParentDirectory(CString strPath)
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
CString strCurPath = strPath;
|
|
|
|
|
|
int Index = strCurPath.ReverseFind('\\');
|
|
|
|
|
|
if (Index == -1)
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
return strCurPath;
|
|
|
|
|
|
}
|
|
|
|
|
|
CString str = strCurPath.Left(Index);
|
|
|
|
|
|
Index = str.ReverseFind('\\');
|
|
|
|
|
|
if (Index == -1)
|
|
|
|
|
|
{
|
|
|
|
|
|
strCurPath = "";
|
|
|
|
|
|
return strCurPath;
|
|
|
|
|
|
}
|
|
|
|
|
|
strCurPath = str.Left(Index);
|
|
|
|
|
|
|
|
|
|
|
|
if(strCurPath.Right(1) != "\\")
|
|
|
|
|
|
strCurPath += "\\";
|
|
|
|
|
|
return strCurPath;
|
|
|
|
|
|
}
|
2019-01-12 18:21:42 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
void CFileManagerDlg::OnReceiveComplete()
|
|
|
|
|
|
{
|
|
|
|
|
|
switch (m_pContext->m_DeCompressionBuffer.GetBuffer(0)[0])
|
|
|
|
|
|
{
|
|
|
|
|
|
case TOKEN_FILE_LIST: // <20>ļ<EFBFBD><C4BC>б<EFBFBD>
|
2021-03-14 20:55:22 +08:00
|
|
|
|
try
|
|
|
|
|
|
{
|
|
|
|
|
|
FixedRemoteFileList
|
2019-01-06 21:18:26 +08:00
|
|
|
|
(
|
2021-03-14 20:55:22 +08:00
|
|
|
|
m_pContext->m_DeCompressionBuffer.GetBuffer(0),
|
|
|
|
|
|
m_pContext->m_DeCompressionBuffer.GetBufferLen() - 1
|
2019-01-06 21:18:26 +08:00
|
|
|
|
);
|
2021-03-14 20:55:22 +08:00
|
|
|
|
}
|
|
|
|
|
|
catch (CMemoryException* e)
|
|
|
|
|
|
{
|
2025-04-27 01:16:16 +08:00
|
|
|
|
Mprintf("[ERROR] CMemoryException\n");
|
2021-03-14 20:55:22 +08:00
|
|
|
|
}
|
|
|
|
|
|
catch (CFileException* e)
|
|
|
|
|
|
{
|
2025-04-27 01:16:16 +08:00
|
|
|
|
Mprintf("[ERROR] CFileException\n");
|
2021-03-14 20:55:22 +08:00
|
|
|
|
}
|
|
|
|
|
|
catch (CException* e)
|
|
|
|
|
|
{
|
2025-04-27 01:16:16 +08:00
|
|
|
|
Mprintf("[ERROR] CException\n");
|
2021-03-14 20:55:22 +08:00
|
|
|
|
}
|
|
|
|
|
|
catch (...) {
|
2025-04-27 01:16:16 +08:00
|
|
|
|
Mprintf("[ERROR] Other exception\n");
|
2021-03-14 20:55:22 +08:00
|
|
|
|
}
|
2019-01-05 20:21:43 +08:00
|
|
|
|
break;
|
2019-01-06 21:18:26 +08:00
|
|
|
|
case TOKEN_FILE_SIZE: // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ʱ<EFBFBD>ĵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
|
|
|
|
|
|
CreateLocalRecvFile();
|
2019-01-05 20:21:43 +08:00
|
|
|
|
break;
|
2019-01-06 21:18:26 +08:00
|
|
|
|
case TOKEN_FILE_DATA: // <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
WriteLocalRecvFile();
|
2019-01-05 20:21:43 +08:00
|
|
|
|
break;
|
2019-01-06 21:18:26 +08:00
|
|
|
|
case TOKEN_TRANSFER_FINISH: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
EndLocalRecvFile();
|
2019-01-05 20:21:43 +08:00
|
|
|
|
break;
|
2019-01-06 21:18:26 +08:00
|
|
|
|
case TOKEN_CREATEFOLDER_FINISH:
|
|
|
|
|
|
GetRemoteFileList(".");
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TOKEN_DELETE_FINISH:
|
|
|
|
|
|
EndRemoteDeleteFile();
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TOKEN_GET_TRANSFER_MODE:
|
|
|
|
|
|
SendTransferMode();
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TOKEN_DATA_CONTINUE:
|
|
|
|
|
|
SendFileData();
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TOKEN_RENAME_FINISH:
|
|
|
|
|
|
// ˢ<><CBA2>Զ<EFBFBD><D4B6><EFBFBD>ļ<EFBFBD><C4BC>б<EFBFBD>
|
|
|
|
|
|
GetRemoteFileList(".");
|
|
|
|
|
|
break;
|
|
|
|
|
|
default:
|
|
|
|
|
|
SendException();
|
2019-01-05 20:21:43 +08:00
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
void CFileManagerDlg::GetRemoteFileList(CString directory)
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
if (directory.GetLength() == 0)
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
int nItem = m_list_remote.GetSelectionMark();
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD>еģ<D0B5><C4A3><EFBFBD>Ŀ¼
|
|
|
|
|
|
if (nItem != -1)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (m_list_remote.GetItemData(nItem) == 1)
|
|
|
|
|
|
{
|
|
|
|
|
|
directory = m_list_remote.GetItemText(nItem, 0);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD>õ<EFBFBD>·<EFBFBD><C2B7>
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
m_Remote_Directory_ComboBox.GetWindowText(m_Remote_Path);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
// <20>õ<EFBFBD><C3B5><EFBFBD>Ŀ¼
|
|
|
|
|
|
if (directory == "..")
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
m_Remote_Path = GetParentDirectory(m_Remote_Path);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
2019-01-06 21:18:26 +08:00
|
|
|
|
else if (directory != ".")
|
|
|
|
|
|
{
|
|
|
|
|
|
m_Remote_Path += directory;
|
|
|
|
|
|
if(m_Remote_Path.Right(1) != "\\")
|
|
|
|
|
|
m_Remote_Path += "\\";
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD>Ŀ¼,<2C><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD>б<EFBFBD>
|
|
|
|
|
|
if (m_Remote_Path.GetLength() == 0)
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
FixedRemoteDriveList();
|
2019-01-05 20:21:43 +08:00
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
int PacketSize = m_Remote_Path.GetLength() + 2;
|
|
|
|
|
|
BYTE *bPacket = (BYTE *)LocalAlloc(LPTR, PacketSize);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
bPacket[0] = COMMAND_LIST_FILES;
|
|
|
|
|
|
memcpy(bPacket + 1, m_Remote_Path.GetBuffer(0), PacketSize - 1);
|
|
|
|
|
|
m_iocpServer->Send(m_pContext, bPacket, PacketSize);
|
|
|
|
|
|
LocalFree(bPacket);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
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_list_remote.EnableWindow(FALSE);
|
|
|
|
|
|
m_ProgressCtrl->SetPos(0);
|
|
|
|
|
|
}
|
2019-01-12 18:21:42 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
void CFileManagerDlg::OnDblclkListRemote(NMHDR* pNMHDR, LRESULT* pResult)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (m_list_remote.GetSelectedCount() == 0 || m_list_remote.GetItemData(m_list_remote.GetSelectionMark()) != 1)
|
|
|
|
|
|
return;
|
|
|
|
|
|
// TODO: Add your control notification handler code here
|
|
|
|
|
|
GetRemoteFileList();
|
|
|
|
|
|
*pResult = 0;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
void CFileManagerDlg::FixedRemoteFileList(BYTE *pbBuffer, DWORD dwBufferLen)
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ImageList
|
2024-12-27 01:40:40 +08:00
|
|
|
|
SHFILEINFO sfi = {};
|
2019-01-06 21:18:26 +08:00
|
|
|
|
HIMAGELIST hImageListLarge = (HIMAGELIST)SHGetFileInfo(NULL, 0, &sfi,sizeof(SHFILEINFO), SHGFI_SYSICONINDEX | SHGFI_LARGEICON);
|
|
|
|
|
|
HIMAGELIST hImageListSmall = (HIMAGELIST)SHGetFileInfo(NULL, 0, &sfi,sizeof(SHFILEINFO), SHGFI_SYSICONINDEX | SHGFI_SMALLICON);
|
|
|
|
|
|
ListView_SetImageList(m_list_remote.m_hWnd, hImageListLarge, LVSIL_NORMAL);
|
|
|
|
|
|
ListView_SetImageList(m_list_remote.m_hWnd, hImageListSmall, LVSIL_SMALL);
|
|
|
|
|
|
|
2019-01-05 20:21:43 +08:00
|
|
|
|
// <20>ؽ<EFBFBD><D8BD><EFBFBD><EFBFBD><EFBFBD>
|
2019-01-06 21:18:26 +08:00
|
|
|
|
m_list_remote.DeleteAllItems();
|
|
|
|
|
|
while(m_list_remote.DeleteColumn(0) != 0);
|
|
|
|
|
|
m_list_remote.InsertColumn(0, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", LVCFMT_LEFT, 200);
|
|
|
|
|
|
m_list_remote.InsertColumn(1, "<EFBFBD><EFBFBD>С", LVCFMT_LEFT, 100);
|
|
|
|
|
|
m_list_remote.InsertColumn(2, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", LVCFMT_LEFT, 100);
|
|
|
|
|
|
m_list_remote.InsertColumn(3, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", LVCFMT_LEFT, 115);
|
|
|
|
|
|
|
|
|
|
|
|
int nItemIndex = 0;
|
|
|
|
|
|
m_list_remote.SetItemData
|
|
|
|
|
|
(
|
|
|
|
|
|
m_list_remote.InsertItem(nItemIndex++, "..", GetIconIndex(NULL, FILE_ATTRIBUTE_DIRECTORY)),
|
|
|
|
|
|
1
|
|
|
|
|
|
);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
/*
|
|
|
|
|
|
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)
|
|
|
|
|
|
*/
|
2019-01-06 21:18:26 +08:00
|
|
|
|
m_list_remote.SetRedraw(FALSE);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
if (dwBufferLen != 0)
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
//
|
2019-01-18 17:37:15 +08:00
|
|
|
|
for (int i = 0; i < 2; ++i)
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD>Token<65><6E><EFBFBD><EFBFBD>5<EFBFBD>ֽ<EFBFBD>
|
|
|
|
|
|
char *pList = (char *)(pbBuffer + 1);
|
|
|
|
|
|
for(char *pBase = pList; pList - pBase < dwBufferLen - 1;)
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
char *pszFileName = NULL;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
DWORD dwFileSizeHigh = 0; // <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ֽڴ<D6BD>С
|
2019-01-06 21:18:26 +08:00
|
|
|
|
DWORD dwFileSizeLow = 0; // <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ֽڴ<D6BD>С
|
|
|
|
|
|
int nItem = 0;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
bool bIsInsert = false;
|
2019-01-06 21:18:26 +08:00
|
|
|
|
FILETIME ftm_strReceiveLocalFileTime;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
int nType = *pList ? FILE_ATTRIBUTE_DIRECTORY : FILE_ATTRIBUTE_NORMAL;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
// i Ϊ 0 ʱ<><CAB1><EFBFBD><EFBFBD>Ŀ¼<C4BF><C2BC>iΪ1ʱ<31><CAB1><EFBFBD>ļ<EFBFBD>
|
2019-01-06 21:18:26 +08:00
|
|
|
|
bIsInsert = !(nType == FILE_ATTRIBUTE_DIRECTORY) == i;
|
|
|
|
|
|
pszFileName = ++pList;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
|
|
|
|
|
if (bIsInsert)
|
|
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
nItem = m_list_remote.InsertItem(nItemIndex++, pszFileName, GetIconIndex(pszFileName, nType));
|
|
|
|
|
|
m_list_remote.SetItemData(nItem, nType == FILE_ATTRIBUTE_DIRECTORY);
|
2024-12-27 01:40:40 +08:00
|
|
|
|
SHFILEINFO sfi = {};
|
2019-01-06 21:18:26 +08:00
|
|
|
|
SHGetFileInfo(pszFileName, FILE_ATTRIBUTE_NORMAL | nType, &sfi,sizeof(SHFILEINFO), SHGFI_TYPENAME | SHGFI_USEFILEATTRIBUTES);
|
|
|
|
|
|
m_list_remote.SetItemText(nItem, 2, sfi.szTypeName);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>õ<EFBFBD><C3B5>ļ<EFBFBD><C4BC><EFBFBD>С
|
2019-01-06 21:18:26 +08:00
|
|
|
|
pList += lstrlen(pszFileName) + 1;
|
|
|
|
|
|
if (bIsInsert)
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
memcpy(&dwFileSizeHigh, pList, 4);
|
|
|
|
|
|
memcpy(&dwFileSizeLow, pList + 4, 4);
|
|
|
|
|
|
CString strSize;
|
2019-01-13 13:36:00 +08:00
|
|
|
|
strSize.Format("%10d KB", (dwFileSizeHigh * (MAXDWORD+long long(1))) / 1024 + dwFileSizeLow / 1024 + (dwFileSizeLow % 1024 ? 1 : 0));
|
2019-01-06 21:18:26 +08:00
|
|
|
|
m_list_remote.SetItemText(nItem, 1, strSize);
|
|
|
|
|
|
memcpy(&ftm_strReceiveLocalFileTime, pList + 8, sizeof(FILETIME));
|
|
|
|
|
|
CTime time(ftm_strReceiveLocalFileTime);
|
|
|
|
|
|
m_list_remote.SetItemText(nItem, 3, time.Format("%Y-%m-%d %H:%M"));
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
2019-01-06 21:18:26 +08:00
|
|
|
|
pList += 16;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
m_list_remote.SetRedraw(TRUE);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
// <20>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>
|
2019-01-06 21:18:26 +08:00
|
|
|
|
m_list_remote.EnableWindow(TRUE);
|
|
|
|
|
|
|
|
|
|
|
|
ShowMessage("Զ<EFBFBD>̣<EFBFBD>װ<EFBFBD><EFBFBD>Ŀ¼ %s <20><><EFBFBD><EFBFBD>", m_Remote_Path);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
void CFileManagerDlg::ShowMessage(char *lpFmt, ...)
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2021-03-14 19:54:52 +08:00
|
|
|
|
char *buff = new char[1024];
|
2019-01-06 21:18:26 +08:00
|
|
|
|
va_list arglist;
|
|
|
|
|
|
va_start( arglist, lpFmt );
|
|
|
|
|
|
|
2021-03-14 19:54:52 +08:00
|
|
|
|
memset(buff, 0, 1024);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
vsprintf(buff, lpFmt, arglist);
|
2021-03-14 19:54:52 +08:00
|
|
|
|
// fix: <20><><EFBFBD>̲߳<DFB3><CCB2><EFBFBD><EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
// m_wndStatusBar.SetPaneText(0, buff);
|
|
|
|
|
|
// msg <20><>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С,<2C><>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
|
|
|
|
|
SendMessage(WM_MY_MESSAGE, 1024, (LPARAM)buff);
|
2019-01-06 21:18:26 +08:00
|
|
|
|
va_end( arglist );
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CFileManagerDlg::OnLocalPrev()
|
|
|
|
|
|
{
|
|
|
|
|
|
// TODO: Add your command handler code here
|
|
|
|
|
|
FixedLocalFileList("..");
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CFileManagerDlg::OnRemotePrev()
|
|
|
|
|
|
{
|
|
|
|
|
|
// TODO: Add your command handler code here
|
|
|
|
|
|
GetRemoteFileList("..");
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CFileManagerDlg::OnLocalView()
|
|
|
|
|
|
{
|
|
|
|
|
|
// TODO: Add your command handler code here
|
|
|
|
|
|
m_list_local.ModifyStyle(LVS_TYPEMASK, LVS_ICON);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ڹ<EFBFBD><DAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾToolTip
|
|
|
|
|
|
BOOL CFileManagerDlg::OnToolTipNotify(UINT id, NMHDR* pNMHDR, LRESULT* pResult)
|
|
|
|
|
|
{
|
|
|
|
|
|
ASSERT(pNMHDR->code == TTN_NEEDTEXTA || pNMHDR->code == TTN_NEEDTEXTW);
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ı߿<DFBF><F2B4B0BF><EFBFBD><EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|
|
|
|
|
if (GetRoutingFrame() != NULL)
|
|
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><>ANSI and UNICODE<44><45><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>汾
|
|
|
|
|
|
TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;
|
|
|
|
|
|
TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;
|
|
|
|
|
|
TCHAR szFullText[256];
|
|
|
|
|
|
|
|
|
|
|
|
CString strTipText;
|
2025-02-06 04:15:34 +08:00
|
|
|
|
UINT_PTR nID = pNMHDR->idFrom;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
//<2F><><EFBFBD><EFBFBD>idFrom<6F><6D>һ<EFBFBD><D2BB><EFBFBD>Ӵ<EFBFBD><D3B4>ڣ<EFBFBD><DAA3><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD>ID<49><44>
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
if (
|
|
|
|
|
|
pNMHDR->code == TTN_NEEDTEXTA
|
|
|
|
|
|
&& (pTTTA->uFlags & TTF_IDISHWND)
|
|
|
|
|
|
|| pNMHDR->code == TTN_NEEDTEXTW
|
|
|
|
|
|
&& (pTTTW->uFlags & TTF_IDISHWND)
|
|
|
|
|
|
)
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
//idFrom<6F>ǹ<EFBFBD><C7B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD>
|
|
|
|
|
|
nID = ::GetDlgCtrlID((HWND)nID);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
2019-01-06 21:18:26 +08:00
|
|
|
|
|
|
|
|
|
|
if (nID != 0) //<2F><><EFBFBD><EFBFBD>0<EFBFBD><30>Ϊһ<CEAA>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD>ť
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
//<2F>õ<EFBFBD>nID<49><44>Ӧ<EFBFBD><D3A6><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
|
|
|
|
|
AfxLoadString(nID, szFullText);
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>Tooltipʹ<70>õ<EFBFBD><C3B5>ı<EFBFBD>
|
|
|
|
|
|
AfxExtractSubString(strTipText, szFullText, 1, '\n');
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
//<2F><><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>
|
|
|
|
|
|
#ifndef _UNICODE
|
|
|
|
|
|
if (pNMHDR->code == TTN_NEEDTEXTA)
|
|
|
|
|
|
lstrcpyn(pTTTA->szText, strTipText, sizeof(pTTTA->szText));
|
|
|
|
|
|
else
|
|
|
|
|
|
_mbstowcsz(pTTTW->szText, strTipText, sizeof(pTTTW->szText));
|
|
|
|
|
|
#else
|
|
|
|
|
|
if (pNMHDR->code == TTN_NEEDTEXTA)
|
|
|
|
|
|
_wcstombsz(pTTTA->szText, strTipText, sizeof(pTTTA->szText));
|
|
|
|
|
|
else
|
|
|
|
|
|
lstrcpyn(pTTTW->szText, strTipText, sizeof(pTTTW->szText));
|
|
|
|
|
|
#endif
|
2019-01-05 20:21:43 +08:00
|
|
|
|
*pResult = 0;
|
2019-01-06 21:18:26 +08:00
|
|
|
|
//<2F><>ʾTooltip<69><70><EFBFBD><EFBFBD>
|
|
|
|
|
|
::SetWindowPos(pNMHDR->hwndFrom, HWND_TOP, 0, 0, 0, 0, SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE);
|
|
|
|
|
|
return TRUE; //<2F><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
//////////////////////////////////<2F><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>//////////////////////////////////////////
|
|
|
|
|
|
void CFileManagerDlg::OnLocalList()
|
|
|
|
|
|
{
|
|
|
|
|
|
// TODO: Add your command handler code here
|
|
|
|
|
|
m_list_local.ModifyStyle(LVS_TYPEMASK, LVS_LIST);
|
|
|
|
|
|
}
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
void CFileManagerDlg::OnLocalReport()
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
// TODO: Add your command handler code here
|
|
|
|
|
|
m_list_local.ModifyStyle(LVS_TYPEMASK, LVS_REPORT);
|
|
|
|
|
|
}
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
void CFileManagerDlg::OnLocalBigicon()
|
|
|
|
|
|
{
|
|
|
|
|
|
// TODO: Add your command handler code here
|
|
|
|
|
|
m_list_local.ModifyStyle(LVS_TYPEMASK, LVS_ICON);
|
|
|
|
|
|
}
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
void CFileManagerDlg::OnLocalSmallicon()
|
|
|
|
|
|
{
|
|
|
|
|
|
// TODO: Add your command handler code here
|
|
|
|
|
|
m_list_local.ModifyStyle(LVS_TYPEMASK, LVS_SMALLICON);
|
|
|
|
|
|
}
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
void CFileManagerDlg::OnRemoteList()
|
|
|
|
|
|
{
|
|
|
|
|
|
// TODO: Add your command handler code here
|
|
|
|
|
|
m_list_remote.ModifyStyle(LVS_TYPEMASK, LVS_LIST);
|
|
|
|
|
|
}
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
void CFileManagerDlg::OnRemoteReport()
|
|
|
|
|
|
{
|
|
|
|
|
|
// TODO: Add your command handler code here
|
|
|
|
|
|
m_list_remote.ModifyStyle(LVS_TYPEMASK, LVS_REPORT);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
void CFileManagerDlg::OnRemoteBigicon()
|
|
|
|
|
|
{
|
|
|
|
|
|
// TODO: Add your command handler code here
|
|
|
|
|
|
m_list_remote.ModifyStyle(LVS_TYPEMASK, LVS_ICON);
|
|
|
|
|
|
}
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
void CFileManagerDlg::OnRemoteSmallicon()
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
// TODO: Add your command handler code here
|
|
|
|
|
|
m_list_remote.ModifyStyle(LVS_TYPEMASK, LVS_SMALLICON);
|
|
|
|
|
|
}
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
void CFileManagerDlg::OnRemoteView()
|
|
|
|
|
|
{
|
|
|
|
|
|
// TODO: Add your command handler code here
|
|
|
|
|
|
m_list_remote.ModifyStyle(LVS_TYPEMASK, LVS_ICON);
|
|
|
|
|
|
}
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
|
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
// Ϊ<><CEAA>Ŀ¼ʱ<C2BC><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD>ť
|
|
|
|
|
|
void CFileManagerDlg::OnUpdateLocalPrev(CCmdUI* pCmdUI)
|
|
|
|
|
|
{
|
|
|
|
|
|
// TODO: Add your command update UI handler code here
|
|
|
|
|
|
pCmdUI->Enable(m_Local_Path.GetLength() && m_list_local.IsWindowEnabled());
|
|
|
|
|
|
}
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
void CFileManagerDlg::OnUpdateLocalDelete(CCmdUI* pCmdUI)
|
|
|
|
|
|
{
|
|
|
|
|
|
// TODO: Add your command update UI handler code here
|
|
|
|
|
|
// <20><><EFBFBD>Ǹ<EFBFBD>Ŀ¼<C4BF><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD>0
|
|
|
|
|
|
pCmdUI->Enable(m_Local_Path.GetLength() && m_list_local.GetSelectedCount() && m_list_local.IsWindowEnabled());
|
|
|
|
|
|
}
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
void CFileManagerDlg::OnUpdateLocalNewfolder(CCmdUI* pCmdUI)
|
|
|
|
|
|
{
|
|
|
|
|
|
// TODO: Add your command update UI handler code here
|
|
|
|
|
|
pCmdUI->Enable(m_Local_Path.GetLength() && m_list_local.IsWindowEnabled());
|
|
|
|
|
|
}
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
void CFileManagerDlg::OnUpdateLocalCopy(CCmdUI* pCmdUI)
|
|
|
|
|
|
{
|
|
|
|
|
|
// TODO: Add your command update UI handler code here
|
|
|
|
|
|
|
|
|
|
|
|
pCmdUI->Enable
|
|
|
|
|
|
(
|
|
|
|
|
|
m_list_local.IsWindowEnabled()
|
|
|
|
|
|
&& (m_Remote_Path.GetLength() || m_list_remote.GetSelectedCount()) // Զ<><D4B6>·<EFBFBD><C2B7>Ϊ<EFBFBD>գ<EFBFBD><D5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>
|
|
|
|
|
|
&& m_list_local.GetSelectedCount()// <20><><EFBFBD><EFBFBD>·<EFBFBD><C2B7>Ϊ<EFBFBD>գ<EFBFBD><D5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>
|
|
|
|
|
|
);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
|
|
|
|
|
|
void CFileManagerDlg::OnUpdateLocalStop(CCmdUI* pCmdUI)
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
// TODO: Add your command update UI handler code here
|
|
|
|
|
|
pCmdUI->Enable(!m_list_local.IsWindowEnabled() && m_bIsUpload);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
void CFileManagerDlg::OnUpdateRemotePrev(CCmdUI* pCmdUI)
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
// TODO: Add your command update UI handler code here
|
|
|
|
|
|
pCmdUI->Enable(m_Remote_Path.GetLength() && m_list_remote.IsWindowEnabled());
|
|
|
|
|
|
}
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
void CFileManagerDlg::OnUpdateRemoteCopy(CCmdUI* pCmdUI)
|
|
|
|
|
|
{
|
|
|
|
|
|
// TODO: Add your command update UI handler code here
|
|
|
|
|
|
// <20><><EFBFBD>Ǹ<EFBFBD>Ŀ¼<C4BF><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD>0
|
|
|
|
|
|
pCmdUI->Enable
|
|
|
|
|
|
(
|
|
|
|
|
|
m_list_remote.IsWindowEnabled()
|
|
|
|
|
|
&& (m_Local_Path.GetLength() || m_list_local.GetSelectedCount()) // <20><><EFBFBD><EFBFBD>·<EFBFBD><C2B7>Ϊ<EFBFBD>գ<EFBFBD><D5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>
|
|
|
|
|
|
&& m_list_remote.GetSelectedCount() // Զ<><D4B6>·<EFBFBD><C2B7>Ϊ<EFBFBD>գ<EFBFBD><D5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>
|
|
|
|
|
|
);
|
|
|
|
|
|
}
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
void CFileManagerDlg::OnUpdateRemoteDelete(CCmdUI* pCmdUI)
|
|
|
|
|
|
{
|
|
|
|
|
|
// TODO: Add your command update UI handler code here
|
|
|
|
|
|
// <20><><EFBFBD>Ǹ<EFBFBD>Ŀ¼<C4BF><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD>0
|
|
|
|
|
|
pCmdUI->Enable(m_Remote_Path.GetLength() && m_list_remote.GetSelectedCount() && m_list_remote.IsWindowEnabled());
|
|
|
|
|
|
}
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
void CFileManagerDlg::OnUpdateRemoteNewfolder(CCmdUI* pCmdUI)
|
|
|
|
|
|
{
|
|
|
|
|
|
// TODO: Add your command update UI handler code here
|
|
|
|
|
|
pCmdUI->Enable(m_Remote_Path.GetLength() && m_list_remote.IsWindowEnabled());
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
void CFileManagerDlg::OnUpdateRemoteStop(CCmdUI* pCmdUI)
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
// TODO: Add your command update UI handler code here
|
|
|
|
|
|
pCmdUI->Enable(!m_list_remote.IsWindowEnabled() && !m_bIsUpload);
|
|
|
|
|
|
}
|
2019-01-12 18:21:42 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
bool CFileManagerDlg::FixedUploadDirectory(LPCTSTR lpPathName)
|
|
|
|
|
|
{
|
|
|
|
|
|
char lpszFilter[MAX_PATH];
|
|
|
|
|
|
char *lpszSlash = NULL;
|
|
|
|
|
|
memset(lpszFilter, 0, sizeof(lpszFilter));
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
if (lpPathName[lstrlen(lpPathName) - 1] != '\\')
|
|
|
|
|
|
lpszSlash = "\\";
|
2019-01-05 20:21:43 +08:00
|
|
|
|
else
|
2019-01-06 21:18:26 +08:00
|
|
|
|
lpszSlash = "";
|
|
|
|
|
|
|
|
|
|
|
|
wsprintf(lpszFilter, "%s%s*.*", lpPathName, lpszSlash);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
|
2019-01-05 20:21:43 +08:00
|
|
|
|
WIN32_FIND_DATA wfd;
|
2019-01-06 21:18:26 +08:00
|
|
|
|
HANDLE hFind = FindFirstFile(lpszFilter, &wfd);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
if (hFind == INVALID_HANDLE_VALUE) // <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
|
|
|
|
|
|
return FALSE;
|
2019-01-06 21:18:26 +08:00
|
|
|
|
|
2019-01-05 20:21:43 +08:00
|
|
|
|
do
|
|
|
|
|
|
{
|
|
|
|
|
|
if (wfd.cFileName[0] == '.')
|
2019-01-06 21:18:26 +08:00
|
|
|
|
continue; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼
|
2019-01-05 20:21:43 +08:00
|
|
|
|
if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
|
|
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
char strDirectory[MAX_PATH];
|
|
|
|
|
|
wsprintf(strDirectory, "%s%s%s", lpPathName, lpszSlash, wfd.cFileName);
|
|
|
|
|
|
FixedUploadDirectory(strDirectory); // <20><><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD>Ŀ¼<C4BF><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼<C4BF><C2BC><EFBFBD>еݹ<D0B5>
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
CString file;
|
|
|
|
|
|
file.Format("%s%s%s", lpPathName, lpszSlash, wfd.cFileName);
|
2025-01-15 18:49:15 +08:00
|
|
|
|
//Mprintf("send file %s\n",strFile);
|
2019-01-06 21:18:26 +08:00
|
|
|
|
m_Remote_Upload_Job.AddTail(file);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
// <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>в<EFBFBD><D0B2><EFBFBD>
|
|
|
|
|
|
}
|
|
|
|
|
|
} while (FindNextFile(hFind, &wfd));
|
|
|
|
|
|
FindClose(hFind); // <20>رղ<D8B1><D5B2>Ҿ<EFBFBD><D2BE><EFBFBD>
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
void CFileManagerDlg::EnableControl(BOOL bEnable)
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
m_list_local.EnableWindow(bEnable);
|
|
|
|
|
|
m_list_remote.EnableWindow(bEnable);
|
|
|
|
|
|
m_Local_Directory_ComboBox.EnableWindow(bEnable);
|
|
|
|
|
|
m_Remote_Directory_ComboBox.EnableWindow(bEnable);
|
|
|
|
|
|
}
|
2019-01-12 18:21:42 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
void CFileManagerDlg::OnLocalCopy()
|
|
|
|
|
|
{
|
|
|
|
|
|
m_bIsUpload = true;
|
|
|
|
|
|
// TODO: Add your command handler code here
|
|
|
|
|
|
|
|
|
|
|
|
// TODO: Add your command handler code here
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>Drag<61>ģ<EFBFBD><C4A3>ҵ<EFBFBD>Drop<6F><70><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8>ļ<EFBFBD><C4BC><EFBFBD>
|
|
|
|
|
|
if (m_nDropIndex != -1 && m_pDropList->GetItemData(m_nDropIndex))
|
|
|
|
|
|
m_hCopyDestFolder = m_pDropList->GetItemText(m_nDropIndex, 0);
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
|
|
|
|
|
|
m_Remote_Upload_Job.RemoveAll();
|
|
|
|
|
|
POSITION pos = m_list_local.GetFirstSelectedItemPosition(); //iterator for the CListCtrl
|
|
|
|
|
|
while(pos) //so long as we have a valid POSITION, we keep iterating
|
|
|
|
|
|
{
|
|
|
|
|
|
int nItem = m_list_local.GetNextSelectedItem(pos);
|
|
|
|
|
|
CString file = m_Local_Path + m_list_local.GetItemText(nItem, 0);
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼
|
|
|
|
|
|
if (m_list_local.GetItemData(nItem))
|
|
|
|
|
|
{
|
|
|
|
|
|
file += '\\';
|
|
|
|
|
|
FixedUploadDirectory(file.GetBuffer(0));
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
// <20><><EFBFBD>ӵ<EFBFBD><D3B5>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>ȥ
|
|
|
|
|
|
m_Remote_Upload_Job.AddTail(file);
|
|
|
|
|
|
}
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
} //EO while(pos) -- at this point we have deleted the moving items and stored them in memory
|
|
|
|
|
|
if (m_Remote_Upload_Job.IsEmpty())
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
::MessageBox(m_hWnd, "<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>", "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", MB_OK|MB_ICONWARNING);
|
|
|
|
|
|
return;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
2019-01-06 21:18:26 +08:00
|
|
|
|
EnableControl(FALSE);
|
|
|
|
|
|
SendUploadJob();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//////////////// <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ////////////////
|
|
|
|
|
|
// ֻ<>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5>ļ<EFBFBD>
|
|
|
|
|
|
// һ<><D2BB>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>صڶ<D8B5><DAB6><EFBFBD><EFBFBD>ļ<EFBFBD> ...
|
|
|
|
|
|
void CFileManagerDlg::OnRemoteCopy()
|
|
|
|
|
|
{
|
|
|
|
|
|
m_bIsUpload = false;
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2021-03-14 12:15:53 +08:00
|
|
|
|
EnableControl(TRUE);
|
2019-01-06 21:18:26 +08:00
|
|
|
|
|
|
|
|
|
|
// TODO: Add your command handler code here
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>Drag<61>ģ<EFBFBD><C4A3>ҵ<EFBFBD>Drop<6F><70><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8>ļ<EFBFBD><C4BC><EFBFBD>
|
|
|
|
|
|
if (m_nDropIndex != -1 && m_pDropList->GetItemData(m_nDropIndex))
|
|
|
|
|
|
m_hCopyDestFolder = m_pDropList->GetItemText(m_nDropIndex, 0);
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
|
|
|
|
|
|
m_Remote_Download_Job.RemoveAll();
|
|
|
|
|
|
POSITION pos = m_list_remote.GetFirstSelectedItemPosition(); //iterator for the CListCtrl
|
|
|
|
|
|
while(pos) //so long as we have a valid POSITION, we keep iterating
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
int nItem = m_list_remote.GetNextSelectedItem(pos);
|
|
|
|
|
|
CString file = m_Remote_Path + m_list_remote.GetItemText(nItem, 0);
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼
|
|
|
|
|
|
if (m_list_remote.GetItemData(nItem))
|
|
|
|
|
|
file += '\\';
|
|
|
|
|
|
// <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>ȥ
|
|
|
|
|
|
m_Remote_Download_Job.AddTail(file);
|
|
|
|
|
|
} //EO while(pos) -- at this point we have deleted the moving items and stored them in memory
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>͵<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
SendDownloadJob();
|
|
|
|
|
|
}
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
BOOL CFileManagerDlg::SendDownloadJob()
|
|
|
|
|
|
{
|
|
|
|
|
|
if (m_Remote_Download_Job.IsEmpty())
|
|
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
CString file = m_Remote_Download_Job.GetHead();
|
|
|
|
|
|
int nPacketSize = file.GetLength() + 2;
|
|
|
|
|
|
BYTE *bPacket = (BYTE *)LocalAlloc(LPTR, nPacketSize);
|
|
|
|
|
|
bPacket[0] = COMMAND_DOWN_FILES;
|
|
|
|
|
|
// <20>ļ<EFBFBD>ƫ<EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
|
|
|
|
|
memcpy(bPacket + 1, file.GetBuffer(0), file.GetLength() + 1);
|
|
|
|
|
|
m_iocpServer->Send(m_pContext, bPacket, nPacketSize);
|
|
|
|
|
|
|
|
|
|
|
|
LocalFree(bPacket);
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD>Լ<EFBFBD>
|
|
|
|
|
|
m_Remote_Download_Job.RemoveHead();
|
|
|
|
|
|
return TRUE;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
BOOL CFileManagerDlg::SendUploadJob()
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
|
|
|
|
|
if (m_Remote_Upload_Job.IsEmpty())
|
|
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
CString strDestDirectory = m_Remote_Path;
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>Ҳ<EFBFBD><D2B2>ѡ<EFBFBD><EFBFBD><F1A3ACB5><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
|
|
|
|
|
|
int nItem = m_list_remote.GetSelectionMark();
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
|
|
|
|
|
|
if (nItem != -1 && m_list_remote.GetItemData(nItem) == 1)
|
|
|
|
|
|
{
|
|
|
|
|
|
strDestDirectory += m_list_remote.GetItemText(nItem, 0) + "\\";
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (!m_hCopyDestFolder.IsEmpty())
|
|
|
|
|
|
{
|
|
|
|
|
|
strDestDirectory += m_hCopyDestFolder + "\\";
|
|
|
|
|
|
}
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
m_strOperatingFile = m_Remote_Upload_Job.GetHead();
|
|
|
|
|
|
|
2019-01-05 20:21:43 +08:00
|
|
|
|
DWORD dwSizeHigh;
|
|
|
|
|
|
DWORD dwSizeLow;
|
|
|
|
|
|
// 1 <20>ֽ<EFBFBD>token, 8<>ֽڴ<D6BD>С, <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>, '\0'
|
|
|
|
|
|
HANDLE hFile;
|
2019-01-06 21:18:26 +08:00
|
|
|
|
CString fileRemote = m_strOperatingFile; // Զ<><D4B6><EFBFBD>ļ<EFBFBD>
|
2019-01-05 20:21:43 +08:00
|
|
|
|
// <20>õ<EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>浽<EFBFBD><E6B5BD>Զ<EFBFBD>̵<EFBFBD><CCB5>ļ<EFBFBD>·<EFBFBD><C2B7>
|
2019-01-06 21:18:26 +08:00
|
|
|
|
fileRemote.Replace(m_Local_Path, strDestDirectory);
|
|
|
|
|
|
m_strUploadRemoteFile = fileRemote;
|
|
|
|
|
|
hFile = CreateFile(m_strOperatingFile.GetBuffer(0), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
if (hFile == INVALID_HANDLE_VALUE)
|
|
|
|
|
|
return FALSE;
|
|
|
|
|
|
dwSizeLow = GetFileSize (hFile, &dwSizeHigh);
|
2019-01-13 13:36:00 +08:00
|
|
|
|
m_nOperatingFileLength = (dwSizeHigh * (MAXDWORD+long long(1))) + dwSizeLow;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
|
|
|
|
|
CloseHandle(hFile);
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
2019-01-06 21:18:26 +08:00
|
|
|
|
int nPacketSize = fileRemote.GetLength() + 10;
|
|
|
|
|
|
BYTE *bPacket = (BYTE *)LocalAlloc(LPTR, nPacketSize);
|
|
|
|
|
|
memset(bPacket, 0, nPacketSize);
|
|
|
|
|
|
|
|
|
|
|
|
bPacket[0] = COMMAND_FILE_SIZE;
|
|
|
|
|
|
memcpy(bPacket + 1, &dwSizeHigh, sizeof(DWORD));
|
|
|
|
|
|
memcpy(bPacket + 5, &dwSizeLow, sizeof(DWORD));
|
|
|
|
|
|
memcpy(bPacket + 9, fileRemote.GetBuffer(0), fileRemote.GetLength() + 1);
|
|
|
|
|
|
|
|
|
|
|
|
m_iocpServer->Send(m_pContext, bPacket, nPacketSize);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
LocalFree(bPacket);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD>Լ<EFBFBD>
|
|
|
|
|
|
m_Remote_Upload_Job.RemoveHead();
|
|
|
|
|
|
return TRUE;
|
|
|
|
|
|
}
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
BOOL CFileManagerDlg::SendDeleteJob()
|
|
|
|
|
|
{
|
|
|
|
|
|
if (m_Remote_Delete_Job.IsEmpty())
|
|
|
|
|
|
return FALSE;
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
CString file = m_Remote_Delete_Job.GetHead();
|
|
|
|
|
|
int nPacketSize = file.GetLength() + 2;
|
|
|
|
|
|
BYTE *bPacket = (BYTE *)LocalAlloc(LPTR, nPacketSize);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
if (file.GetAt(file.GetLength() - 1) == '\\')
|
|
|
|
|
|
{
|
2019-01-13 13:36:00 +08:00
|
|
|
|
ShowMessage("Զ<EFBFBD>̣<EFBFBD>ɾ<EFBFBD><EFBFBD>Ŀ¼ %s\\*.* <20><><EFBFBD><EFBFBD>", file);
|
2019-01-06 21:18:26 +08:00
|
|
|
|
bPacket[0] = COMMAND_DELETE_DIRECTORY;
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
ShowMessage("Զ<EFBFBD>̣<EFBFBD>ɾ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD> %s <20><><EFBFBD><EFBFBD>", file);
|
|
|
|
|
|
bPacket[0] = COMMAND_DELETE_FILE;
|
|
|
|
|
|
}
|
|
|
|
|
|
// <20>ļ<EFBFBD>ƫ<EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
|
|
|
|
|
memcpy(bPacket + 1, file.GetBuffer(0), nPacketSize - 1);
|
|
|
|
|
|
m_iocpServer->Send(m_pContext, bPacket, nPacketSize);
|
|
|
|
|
|
|
|
|
|
|
|
LocalFree(bPacket);
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD>Լ<EFBFBD>
|
|
|
|
|
|
m_Remote_Delete_Job.RemoveHead();
|
|
|
|
|
|
return TRUE;
|
|
|
|
|
|
}
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
void CFileManagerDlg::CreateLocalRecvFile()
|
|
|
|
|
|
{
|
|
|
|
|
|
// <20><><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
m_nCounter = 0;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
CString strDestDirectory = m_Local_Path;
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2>ѡ<EFBFBD><EFBFBD><F1A3ACB5><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
|
|
|
|
|
|
int nItem = m_list_local.GetSelectionMark();
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
// <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
|
|
|
|
|
|
if (nItem != -1 && m_list_local.GetItemData(nItem) == 1)
|
|
|
|
|
|
{
|
|
|
|
|
|
strDestDirectory += m_list_local.GetItemText(nItem, 0) + "\\";
|
|
|
|
|
|
}
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
if (!m_hCopyDestFolder.IsEmpty())
|
|
|
|
|
|
{
|
|
|
|
|
|
strDestDirectory += m_hCopyDestFolder + "\\";
|
|
|
|
|
|
}
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
FILESIZE *pFileSize = (FILESIZE *)(m_pContext->m_DeCompressionBuffer.GetBuffer(1));
|
|
|
|
|
|
DWORD dwSizeHigh = pFileSize->dwSizeHigh;
|
|
|
|
|
|
DWORD dwSizeLow = pFileSize->dwSizeLow;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-13 13:36:00 +08:00
|
|
|
|
m_nOperatingFileLength = (dwSizeHigh * (MAXDWORD+long long(1))) + dwSizeLow;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
// <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
|
|
|
|
|
|
m_strOperatingFile = m_pContext->m_DeCompressionBuffer.GetBuffer(9);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
m_strReceiveLocalFile = m_strOperatingFile;
|
|
|
|
|
|
|
|
|
|
|
|
// <20>õ<EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>浽<EFBFBD>ı<EFBFBD><C4B1>ص<EFBFBD><D8B5>ļ<EFBFBD>·<EFBFBD><C2B7>
|
|
|
|
|
|
m_strReceiveLocalFile.Replace(m_Remote_Path, strDestDirectory);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼
|
|
|
|
|
|
MakeSureDirectoryPathExists(m_strReceiveLocalFile.GetBuffer(0));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
WIN32_FIND_DATA FindFileData;
|
|
|
|
|
|
HANDLE hFind = FindFirstFile(m_strReceiveLocalFile.GetBuffer(0), &FindFileData);
|
|
|
|
|
|
|
|
|
|
|
|
if (hFind != INVALID_HANDLE_VALUE
|
|
|
|
|
|
&& m_nTransferMode != TRANSFER_MODE_OVERWRITE_ALL
|
|
|
|
|
|
&& m_nTransferMode != TRANSFER_MODE_ADDITION_ALL
|
|
|
|
|
|
&& m_nTransferMode != TRANSFER_MODE_JUMP_ALL
|
|
|
|
|
|
)
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
CFileTransferModeDlg dlg(this);
|
|
|
|
|
|
dlg.m_strFileName = m_strReceiveLocalFile;
|
|
|
|
|
|
switch (dlg.DoModal())
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
case IDC_OVERWRITE:
|
|
|
|
|
|
m_nTransferMode = TRANSFER_MODE_OVERWRITE;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case IDC_OVERWRITE_ALL:
|
|
|
|
|
|
m_nTransferMode = TRANSFER_MODE_OVERWRITE_ALL;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case IDC_ADDITION:
|
|
|
|
|
|
m_nTransferMode = TRANSFER_MODE_ADDITION;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case IDC_ADDITION_ALL:
|
|
|
|
|
|
m_nTransferMode = TRANSFER_MODE_ADDITION_ALL;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case IDC_JUMP:
|
|
|
|
|
|
m_nTransferMode = TRANSFER_MODE_JUMP;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case IDC_JUMP_ALL:
|
|
|
|
|
|
m_nTransferMode = TRANSFER_MODE_JUMP_ALL;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case IDC_CANCEL:
|
|
|
|
|
|
m_nTransferMode = TRANSFER_MODE_CANCEL;
|
|
|
|
|
|
break;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
if (m_nTransferMode == TRANSFER_MODE_CANCEL)
|
|
|
|
|
|
{
|
|
|
|
|
|
// ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
m_bIsStop = true;
|
|
|
|
|
|
SendStop();
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
int nTransferMode;
|
|
|
|
|
|
switch (m_nTransferMode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TRANSFER_MODE_OVERWRITE_ALL:
|
|
|
|
|
|
nTransferMode = TRANSFER_MODE_OVERWRITE;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TRANSFER_MODE_ADDITION_ALL:
|
|
|
|
|
|
nTransferMode = TRANSFER_MODE_ADDITION;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TRANSFER_MODE_JUMP_ALL:
|
|
|
|
|
|
nTransferMode = TRANSFER_MODE_JUMP;
|
|
|
|
|
|
break;
|
|
|
|
|
|
default:
|
|
|
|
|
|
nTransferMode = m_nTransferMode;
|
|
|
|
|
|
}
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
// 1<>ֽ<EFBFBD>Token,<2C><><EFBFBD>ֽ<EFBFBD>ƫ<EFBFBD>Ƹ<EFBFBD><C6B8><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>ƫ<EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD>λ
|
|
|
|
|
|
BYTE bToken[9];
|
|
|
|
|
|
DWORD dwCreationDisposition; // <20>ļ<EFBFBD><C4BC><EFBFBD>ʽ
|
|
|
|
|
|
memset(bToken, 0, sizeof(bToken));
|
|
|
|
|
|
bToken[0] = COMMAND_CONTINUE;
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ļ<EFBFBD><C4BC>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
if (hFind != INVALID_HANDLE_VALUE)
|
|
|
|
|
|
{
|
|
|
|
|
|
// <20><>ʾ<EFBFBD><CABE>ʲô
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
if (nTransferMode == TRANSFER_MODE_ADDITION)
|
|
|
|
|
|
{
|
|
|
|
|
|
memcpy(bToken + 1, &FindFileData.nFileSizeHigh, 4);
|
|
|
|
|
|
memcpy(bToken + 5, &FindFileData.nFileSizeLow, 4);
|
|
|
|
|
|
// <20><><EFBFBD>յij<D5B5><C4B3>ȵ<EFBFBD><C8B5><EFBFBD>
|
2019-01-13 13:36:00 +08:00
|
|
|
|
m_nCounter += FindFileData.nFileSizeHigh * (MAXDWORD+long long(1));
|
2019-01-06 21:18:26 +08:00
|
|
|
|
m_nCounter += FindFileData.nFileSizeLow;
|
|
|
|
|
|
|
|
|
|
|
|
dwCreationDisposition = OPEN_EXISTING;
|
|
|
|
|
|
}
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>
|
|
|
|
|
|
else if (nTransferMode == TRANSFER_MODE_OVERWRITE)
|
|
|
|
|
|
{
|
|
|
|
|
|
// ƫ<><C6AB><EFBFBD><EFBFBD>0
|
|
|
|
|
|
memset(bToken + 1, 0, 8);
|
|
|
|
|
|
// <20><><EFBFBD>´<EFBFBD><C2B4><EFBFBD>
|
|
|
|
|
|
dwCreationDisposition = CREATE_ALWAYS;
|
|
|
|
|
|
}
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>Ƶ<EFBFBD>-1
|
|
|
|
|
|
else if (nTransferMode == TRANSFER_MODE_JUMP)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_ProgressCtrl->SetPos(100);
|
|
|
|
|
|
DWORD dwOffset = -1;
|
|
|
|
|
|
memcpy(bToken + 5, &dwOffset, 4);
|
|
|
|
|
|
dwCreationDisposition = OPEN_EXISTING;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
// ƫ<><C6AB><EFBFBD><EFBFBD>0
|
|
|
|
|
|
memset(bToken + 1, 0, 8);
|
|
|
|
|
|
// <20><><EFBFBD>´<EFBFBD><C2B4><EFBFBD>
|
|
|
|
|
|
dwCreationDisposition = CREATE_ALWAYS;
|
|
|
|
|
|
}
|
|
|
|
|
|
FindClose(hFind);
|
|
|
|
|
|
|
|
|
|
|
|
HANDLE hFile =
|
|
|
|
|
|
CreateFile
|
|
|
|
|
|
(
|
|
|
|
|
|
m_strReceiveLocalFile.GetBuffer(0),
|
|
|
|
|
|
GENERIC_WRITE,
|
|
|
|
|
|
FILE_SHARE_WRITE,
|
|
|
|
|
|
NULL,
|
|
|
|
|
|
dwCreationDisposition,
|
|
|
|
|
|
FILE_ATTRIBUTE_NORMAL,
|
|
|
|
|
|
0
|
|
|
|
|
|
);
|
|
|
|
|
|
// <20><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
if (hFile == INVALID_HANDLE_VALUE)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_nOperatingFileLength = 0;
|
|
|
|
|
|
m_nCounter = 0;
|
|
|
|
|
|
::MessageBox(m_hWnd, m_strReceiveLocalFile + " <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>", "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", MB_OK|MB_ICONWARNING);
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
CloseHandle(hFile);
|
|
|
|
|
|
|
|
|
|
|
|
ShowProgress();
|
|
|
|
|
|
if (m_bIsStop)
|
|
|
|
|
|
SendStop();
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
// <20><><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>token,<2C><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>
|
|
|
|
|
|
m_iocpServer->Send(m_pContext, bToken, sizeof(bToken));
|
|
|
|
|
|
}
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
2019-01-06 21:18:26 +08:00
|
|
|
|
|
2019-01-12 18:21:42 +08:00
|
|
|
|
// д<><D0B4><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
2019-01-06 21:18:26 +08:00
|
|
|
|
void CFileManagerDlg::WriteLocalRecvFile()
|
|
|
|
|
|
{
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
BYTE *pData;
|
|
|
|
|
|
DWORD dwBytesToWrite;
|
|
|
|
|
|
DWORD dwBytesWrite;
|
|
|
|
|
|
int nHeadLength = 9; // 1 + 4 + 4 <20><><EFBFBD>ݰ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>С<EFBFBD><D0A1>Ϊ<EFBFBD>̶<EFBFBD><CCB6><EFBFBD>9
|
|
|
|
|
|
FILESIZE *pFileSize;
|
|
|
|
|
|
// <20>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>ݵ<EFBFBD>ƫ<EFBFBD><C6AB>
|
|
|
|
|
|
pData = m_pContext->m_DeCompressionBuffer.GetBuffer(nHeadLength);
|
|
|
|
|
|
|
|
|
|
|
|
pFileSize = (FILESIZE *)m_pContext->m_DeCompressionBuffer.GetBuffer(1);
|
|
|
|
|
|
// <20>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>е<EFBFBD>ƫ<EFBFBD><C6AB>, <20><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
m_nCounter = MAKEINT64(pFileSize->dwSizeLow, pFileSize->dwSizeHigh);
|
|
|
|
|
|
|
|
|
|
|
|
LONG dwOffsetHigh = pFileSize->dwSizeHigh;
|
|
|
|
|
|
LONG dwOffsetLow = pFileSize->dwSizeLow;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
dwBytesToWrite = m_pContext->m_DeCompressionBuffer.GetBufferLen() - nHeadLength;
|
|
|
|
|
|
|
|
|
|
|
|
HANDLE hFile =
|
|
|
|
|
|
CreateFile
|
|
|
|
|
|
(
|
|
|
|
|
|
m_strReceiveLocalFile.GetBuffer(0),
|
|
|
|
|
|
GENERIC_WRITE,
|
|
|
|
|
|
FILE_SHARE_WRITE,
|
|
|
|
|
|
NULL,
|
|
|
|
|
|
OPEN_EXISTING,
|
|
|
|
|
|
FILE_ATTRIBUTE_NORMAL,
|
|
|
|
|
|
0
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
SetFilePointer(hFile, dwOffsetLow, &dwOffsetHigh, FILE_BEGIN);
|
|
|
|
|
|
|
|
|
|
|
|
int nRet = 0, i = 0;
|
2019-01-18 17:37:15 +08:00
|
|
|
|
for (; i < MAX_WRITE_RETRY; ++i)
|
2019-01-06 21:18:26 +08:00
|
|
|
|
{
|
|
|
|
|
|
// д<><D0B4><EFBFBD>ļ<EFBFBD>
|
|
|
|
|
|
nRet = WriteFile
|
|
|
|
|
|
(
|
|
|
|
|
|
hFile,
|
|
|
|
|
|
pData,
|
|
|
|
|
|
dwBytesToWrite,
|
|
|
|
|
|
&dwBytesWrite,
|
|
|
|
|
|
NULL
|
|
|
|
|
|
);
|
|
|
|
|
|
if (nRet > 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if (i == MAX_WRITE_RETRY && nRet <= 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
::MessageBox(m_hWnd, m_strReceiveLocalFile + " <20>ļ<EFBFBD>д<EFBFBD><D0B4>ʧ<EFBFBD><CAA7>", "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", MB_OK|MB_ICONWARNING);
|
|
|
|
|
|
}
|
|
|
|
|
|
CloseHandle(hFile);
|
|
|
|
|
|
// Ϊ<>˱Ƚϣ<C8BD><CFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
m_nCounter += dwBytesWrite;
|
|
|
|
|
|
ShowProgress();
|
|
|
|
|
|
if (m_bIsStop)
|
|
|
|
|
|
SendStop();
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
BYTE bToken[9];
|
|
|
|
|
|
bToken[0] = COMMAND_CONTINUE;
|
|
|
|
|
|
dwOffsetLow += dwBytesWrite;
|
|
|
|
|
|
memcpy(bToken + 1, &dwOffsetHigh, sizeof(dwOffsetHigh));
|
|
|
|
|
|
memcpy(bToken + 5, &dwOffsetLow, sizeof(dwOffsetLow));
|
|
|
|
|
|
m_iocpServer->Send(m_pContext, bToken, sizeof(bToken));
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CFileManagerDlg::EndLocalRecvFile()
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
m_nCounter = 0;
|
|
|
|
|
|
m_strOperatingFile = "";
|
|
|
|
|
|
m_nOperatingFileLength = 0;
|
|
|
|
|
|
|
|
|
|
|
|
if (m_Remote_Download_Job.IsEmpty() || m_bIsStop)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_Remote_Download_Job.RemoveAll();
|
|
|
|
|
|
m_bIsStop = false;
|
|
|
|
|
|
// <20><><EFBFBD>ô<EFBFBD><C3B4>䷽ʽ
|
|
|
|
|
|
m_nTransferMode = TRANSFER_MODE_NORMAL;
|
|
|
|
|
|
EnableControl(TRUE);
|
|
|
|
|
|
FixedLocalFileList(".");
|
2019-01-13 13:36:00 +08:00
|
|
|
|
ShowMessage("<EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD>װ<EFBFBD><EFBFBD>Ŀ¼ %s\\*.* <20><><EFBFBD><EFBFBD>", m_Local_Path);
|
2019-01-06 21:18:26 +08:00
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
// <20>ҿ<EFBFBD><D2BF><EFBFBD><EFBFBD><EFBFBD>sleep<65>»<EFBFBD><C2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD>ûsend<6E><64>ȥ
|
|
|
|
|
|
Sleep(5);
|
|
|
|
|
|
SendDownloadJob();
|
|
|
|
|
|
}
|
|
|
|
|
|
return;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
void CFileManagerDlg::EndLocalUploadFile()
|
|
|
|
|
|
{
|
|
|
|
|
|
m_nCounter = 0;
|
|
|
|
|
|
m_strOperatingFile = "";
|
|
|
|
|
|
m_nOperatingFileLength = 0;
|
|
|
|
|
|
|
|
|
|
|
|
if (m_Remote_Upload_Job.IsEmpty() || m_bIsStop)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_Remote_Upload_Job.RemoveAll();
|
|
|
|
|
|
m_bIsStop = false;
|
|
|
|
|
|
EnableControl(TRUE);
|
|
|
|
|
|
GetRemoteFileList(".");
|
2019-01-13 13:36:00 +08:00
|
|
|
|
ShowMessage("Զ<EFBFBD>̣<EFBFBD>װ<EFBFBD><EFBFBD>Ŀ¼ %s\\*.* <20><><EFBFBD><EFBFBD>", m_Remote_Path);
|
2019-01-06 21:18:26 +08:00
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
// <20>ҿ<EFBFBD><D2BF><EFBFBD><EFBFBD><EFBFBD>sleep<65>»<EFBFBD><C2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD>ûsend<6E><64>ȥ
|
|
|
|
|
|
Sleep(5);
|
|
|
|
|
|
SendUploadJob();
|
|
|
|
|
|
}
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
2019-01-12 18:21:42 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
void CFileManagerDlg::EndRemoteDeleteFile()
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
if (m_Remote_Delete_Job.IsEmpty() || m_bIsStop)
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
m_bIsStop = false;
|
|
|
|
|
|
EnableControl(TRUE);
|
|
|
|
|
|
GetRemoteFileList(".");
|
2019-01-13 13:36:00 +08:00
|
|
|
|
ShowMessage("Զ<EFBFBD>̣<EFBFBD>װ<EFBFBD><EFBFBD>Ŀ¼ %s\\*.* <20><><EFBFBD><EFBFBD>", m_Remote_Path);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
// <20>ҿ<EFBFBD><D2BF><EFBFBD><EFBFBD><EFBFBD>sleep<65>»<EFBFBD><C2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD>ûsend<6E><64>ȥ
|
|
|
|
|
|
Sleep(5);
|
|
|
|
|
|
SendDeleteJob();
|
|
|
|
|
|
}
|
|
|
|
|
|
return;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
void CFileManagerDlg::SendException()
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
BYTE bBuff = COMMAND_EXCEPTION;
|
|
|
|
|
|
m_iocpServer->Send(m_pContext, &bBuff, 1);
|
|
|
|
|
|
}
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
void CFileManagerDlg::SendContinue()
|
|
|
|
|
|
{
|
|
|
|
|
|
BYTE bBuff = COMMAND_CONTINUE;
|
|
|
|
|
|
m_iocpServer->Send(m_pContext, &bBuff, 1);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CFileManagerDlg::SendStop()
|
|
|
|
|
|
{
|
|
|
|
|
|
BYTE bBuff = COMMAND_STOP;
|
|
|
|
|
|
m_iocpServer->Send(m_pContext, &bBuff, 1);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CFileManagerDlg::ShowProgress()
|
|
|
|
|
|
{
|
|
|
|
|
|
char *lpDirection = NULL;
|
|
|
|
|
|
if (m_bIsUpload)
|
|
|
|
|
|
lpDirection = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>";
|
|
|
|
|
|
else
|
|
|
|
|
|
lpDirection = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>";
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
if ((int)m_nCounter == -1)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_nCounter = m_nOperatingFileLength;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int progress = (float)(m_nCounter * 100) / m_nOperatingFileLength;
|
|
|
|
|
|
ShowMessage("%s %s %dKB (%d%%)", lpDirection, m_strOperatingFile, (int)(m_nCounter / 1024), progress);
|
|
|
|
|
|
m_ProgressCtrl->SetPos(progress);
|
|
|
|
|
|
|
|
|
|
|
|
if (m_nCounter == m_nOperatingFileLength)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_nCounter = m_nOperatingFileLength = 0;
|
|
|
|
|
|
// <20>ر<EFBFBD><D8B1>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
}
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
void CFileManagerDlg::OnLocalDelete()
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
m_bIsUpload = true;
|
|
|
|
|
|
CString str;
|
|
|
|
|
|
if (m_list_local.GetSelectedCount() > 1)
|
|
|
|
|
|
str.Format("ȷ<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> %d <20><>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD>?", m_list_local.GetSelectedCount());
|
|
|
|
|
|
else
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
CString file = m_list_local.GetItemText(m_list_local.GetSelectionMark(), 0);
|
|
|
|
|
|
if (m_list_local.GetItemData(m_list_local.GetSelectionMark()) == 1)
|
|
|
|
|
|
str.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>?", file);
|
|
|
|
|
|
else
|
|
|
|
|
|
str.Format("ȷʵҪ<EFBFBD>ѡ<EFBFBD>%s<><73>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD>?", file);
|
|
|
|
|
|
}
|
|
|
|
|
|
if (::MessageBox(m_hWnd, str, "ȷ<EFBFBD><EFBFBD>ɾ<EFBFBD><EFBFBD>", MB_YESNO|MB_ICONQUESTION) == IDNO)
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
|
|
EnableControl(FALSE);
|
|
|
|
|
|
|
|
|
|
|
|
POSITION pos = m_list_local.GetFirstSelectedItemPosition(); //iterator for the CListCtrl
|
|
|
|
|
|
while(pos) //so long as we have a valid POSITION, we keep iterating
|
|
|
|
|
|
{
|
|
|
|
|
|
int nItem = m_list_local.GetNextSelectedItem(pos);
|
|
|
|
|
|
CString file = m_Local_Path + m_list_local.GetItemText(nItem, 0);
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼
|
|
|
|
|
|
if (m_list_local.GetItemData(nItem))
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
file += '\\';
|
|
|
|
|
|
DeleteDirectory(file);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
2019-01-06 21:18:26 +08:00
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
DeleteFile(file);
|
|
|
|
|
|
}
|
|
|
|
|
|
} //EO while(pos) -- at this point we have deleted the moving items and stored them in memory
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
EnableControl(TRUE);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
FixedLocalFileList(".");
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
void CFileManagerDlg::OnRemoteDelete()
|
|
|
|
|
|
{
|
|
|
|
|
|
m_bIsUpload = false;
|
|
|
|
|
|
// TODO: Add your command handler code here
|
|
|
|
|
|
CString str;
|
|
|
|
|
|
if (m_list_remote.GetSelectedCount() > 1)
|
|
|
|
|
|
str.Format("ȷ<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> %d <20><>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD>?", m_list_remote.GetSelectedCount());
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
CString file = m_list_remote.GetItemText(m_list_remote.GetSelectionMark(), 0);
|
|
|
|
|
|
if (m_list_remote.GetItemData(m_list_remote.GetSelectionMark()) == 1)
|
|
|
|
|
|
str.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>?", file);
|
|
|
|
|
|
else
|
|
|
|
|
|
str.Format("ȷʵҪ<EFBFBD>ѡ<EFBFBD>%s<><73>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD>?", file);
|
|
|
|
|
|
}
|
|
|
|
|
|
if (::MessageBox(m_hWnd, str, "ȷ<EFBFBD><EFBFBD>ɾ<EFBFBD><EFBFBD>", MB_YESNO|MB_ICONQUESTION) == IDNO)
|
|
|
|
|
|
return;
|
|
|
|
|
|
m_Remote_Delete_Job.RemoveAll();
|
|
|
|
|
|
POSITION pos = m_list_remote.GetFirstSelectedItemPosition(); //iterator for the CListCtrl
|
|
|
|
|
|
while(pos) //so long as we have a valid POSITION, we keep iterating
|
|
|
|
|
|
{
|
|
|
|
|
|
int nItem = m_list_remote.GetNextSelectedItem(pos);
|
|
|
|
|
|
CString file = m_Remote_Path + m_list_remote.GetItemText(nItem, 0);
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼
|
|
|
|
|
|
if (m_list_remote.GetItemData(nItem))
|
|
|
|
|
|
file += '\\';
|
|
|
|
|
|
|
|
|
|
|
|
m_Remote_Delete_Job.AddTail(file);
|
|
|
|
|
|
} //EO while(pos) -- at this point we have deleted the moving items and stored them in memory
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
EnableControl(FALSE);
|
|
|
|
|
|
// <20><><EFBFBD>͵<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
SendDeleteJob();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CFileManagerDlg::OnRemoteStop()
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
// TODO: Add your command handler code here
|
|
|
|
|
|
m_bIsStop = true;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
void CFileManagerDlg::OnLocalStop()
|
|
|
|
|
|
{
|
|
|
|
|
|
// TODO: Add your command handler code here
|
|
|
|
|
|
m_bIsStop = true;
|
|
|
|
|
|
}
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
void CFileManagerDlg::PostNcDestroy()
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
// TODO: Add your specialized code here and/or call the base class
|
|
|
|
|
|
delete this;
|
|
|
|
|
|
CDialog::PostNcDestroy();
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
void CFileManagerDlg::SendTransferMode()
|
|
|
|
|
|
{
|
|
|
|
|
|
CFileTransferModeDlg dlg(this);
|
|
|
|
|
|
dlg.m_strFileName = m_strUploadRemoteFile;
|
|
|
|
|
|
switch (dlg.DoModal())
|
|
|
|
|
|
{
|
|
|
|
|
|
case IDC_OVERWRITE:
|
|
|
|
|
|
m_nTransferMode = TRANSFER_MODE_OVERWRITE;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case IDC_OVERWRITE_ALL:
|
|
|
|
|
|
m_nTransferMode = TRANSFER_MODE_OVERWRITE_ALL;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case IDC_ADDITION:
|
|
|
|
|
|
m_nTransferMode = TRANSFER_MODE_ADDITION;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case IDC_ADDITION_ALL:
|
|
|
|
|
|
m_nTransferMode = TRANSFER_MODE_ADDITION_ALL;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case IDC_JUMP:
|
|
|
|
|
|
m_nTransferMode = TRANSFER_MODE_JUMP;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case IDC_JUMP_ALL:
|
|
|
|
|
|
m_nTransferMode = TRANSFER_MODE_JUMP_ALL;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case IDC_CANCEL:
|
|
|
|
|
|
m_nTransferMode = TRANSFER_MODE_CANCEL;
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
if (m_nTransferMode == TRANSFER_MODE_CANCEL)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_bIsStop = true;
|
|
|
|
|
|
EndLocalUploadFile();
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
BYTE bToken[5];
|
|
|
|
|
|
bToken[0] = COMMAND_SET_TRANSFER_MODE;
|
|
|
|
|
|
memcpy(bToken + 1, &m_nTransferMode, sizeof(m_nTransferMode));
|
|
|
|
|
|
m_iocpServer->Send(m_pContext, (unsigned char *)&bToken, sizeof(bToken));
|
|
|
|
|
|
}
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
void CFileManagerDlg::SendFileData()
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
FILESIZE *pFileSize = (FILESIZE *)(m_pContext->m_DeCompressionBuffer.GetBuffer(1));
|
|
|
|
|
|
LONG dwOffsetHigh = pFileSize->dwSizeHigh ;
|
|
|
|
|
|
LONG dwOffsetLow = pFileSize->dwSizeLow;
|
|
|
|
|
|
|
|
|
|
|
|
m_nCounter = MAKEINT64(pFileSize->dwSizeLow, pFileSize->dwSizeHigh);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
ShowProgress();
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
if (m_nCounter == m_nOperatingFileLength || pFileSize->dwSizeLow == -1 || m_bIsStop)
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
EndLocalUploadFile();
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
HANDLE hFile;
|
|
|
|
|
|
hFile = CreateFile(m_strOperatingFile.GetBuffer(0), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
|
|
|
|
|
|
if (hFile == INVALID_HANDLE_VALUE)
|
|
|
|
|
|
{
|
|
|
|
|
|
return;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
2019-01-06 21:18:26 +08:00
|
|
|
|
|
|
|
|
|
|
SetFilePointer(hFile, dwOffsetLow, &dwOffsetHigh, FILE_BEGIN);
|
|
|
|
|
|
|
|
|
|
|
|
int nHeadLength = 9; // 1 + 4 + 4 <20><><EFBFBD>ݰ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>С<EFBFBD><D0A1>Ϊ<EFBFBD>̶<EFBFBD><CCB6><EFBFBD>9
|
|
|
|
|
|
|
|
|
|
|
|
DWORD nNumberOfBytesToRead = MAX_SEND_BUFFER - nHeadLength;
|
|
|
|
|
|
DWORD nNumberOfBytesRead = 0;
|
|
|
|
|
|
BYTE *lpBuffer = (BYTE *)LocalAlloc(LPTR, MAX_SEND_BUFFER);
|
|
|
|
|
|
// Token, <20><>С<EFBFBD><D0A1>ƫ<EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
lpBuffer[0] = COMMAND_FILE_DATA;
|
|
|
|
|
|
memcpy(lpBuffer + 1, &dwOffsetHigh, sizeof(dwOffsetHigh));
|
|
|
|
|
|
memcpy(lpBuffer + 5, &dwOffsetLow, sizeof(dwOffsetLow));
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>ֵ
|
|
|
|
|
|
bool bRet = true;
|
|
|
|
|
|
ReadFile(hFile, lpBuffer + nHeadLength, nNumberOfBytesToRead, &nNumberOfBytesRead, NULL);
|
|
|
|
|
|
CloseHandle(hFile);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
if (nNumberOfBytesRead > 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
int nPacketSize = nNumberOfBytesRead + nHeadLength;
|
|
|
|
|
|
m_iocpServer->Send(m_pContext, lpBuffer, nPacketSize);
|
|
|
|
|
|
}
|
|
|
|
|
|
LocalFree(lpBuffer);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
bool CFileManagerDlg::DeleteDirectory(LPCTSTR lpszDirectory)
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
WIN32_FIND_DATA wfd;
|
|
|
|
|
|
char lpszFilter[MAX_PATH];
|
|
|
|
|
|
|
|
|
|
|
|
wsprintf(lpszFilter, "%s\\*.*", lpszDirectory);
|
|
|
|
|
|
|
|
|
|
|
|
HANDLE hFind = FindFirstFile(lpszFilter, &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 strDirectory[MAX_PATH];
|
|
|
|
|
|
wsprintf(strDirectory, "%s\\%s", lpszDirectory, wfd.cFileName);
|
|
|
|
|
|
DeleteDirectory(strDirectory);
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
char strFile[MAX_PATH];
|
|
|
|
|
|
wsprintf(strFile, "%s\\%s", lpszDirectory, wfd.cFileName);
|
|
|
|
|
|
DeleteFile(strFile);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
} while (FindNextFile(hFind, &wfd));
|
|
|
|
|
|
|
|
|
|
|
|
FindClose(hFind); // <20>رղ<D8B1><D5B2>Ҿ<EFBFBD><D2BE><EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
if(!RemoveDirectory(lpszDirectory))
|
|
|
|
|
|
{
|
|
|
|
|
|
return FALSE;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
2019-01-06 21:18:26 +08:00
|
|
|
|
return true;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
void CFileManagerDlg::OnLocalNewfolder()
|
|
|
|
|
|
{
|
|
|
|
|
|
if (m_Local_Path == "")
|
|
|
|
|
|
return;
|
|
|
|
|
|
// TODO: Add your command handler code here
|
|
|
|
|
|
|
2025-04-02 21:12:14 +08:00
|
|
|
|
CInputDialog dlg(this);
|
|
|
|
|
|
dlg.Init(_T("<EFBFBD>½<EFBFBD>Ŀ¼"), _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD>:"));
|
2019-01-06 21:18:26 +08:00
|
|
|
|
|
|
|
|
|
|
if (dlg.DoModal() == IDOK && dlg.m_str.GetLength())
|
|
|
|
|
|
{
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼
|
|
|
|
|
|
MakeSureDirectoryPathExists(m_Local_Path + dlg.m_str + "\\");
|
|
|
|
|
|
FixedLocalFileList(".");
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
void CFileManagerDlg::OnRemoteNewfolder()
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
if (m_Remote_Path == "")
|
|
|
|
|
|
return;
|
|
|
|
|
|
// TODO: Add your command handler code here
|
|
|
|
|
|
// TODO: Add your command handler code here
|
2025-04-02 21:12:14 +08:00
|
|
|
|
CInputDialog dlg(this);
|
|
|
|
|
|
dlg.Init(_T("<EFBFBD>½<EFBFBD>Ŀ¼"), _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD>:"));
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
if (dlg.DoModal() == IDOK && dlg.m_str.GetLength())
|
|
|
|
|
|
{
|
|
|
|
|
|
CString file = m_Remote_Path + dlg.m_str + "\\";
|
|
|
|
|
|
UINT nPacketSize = file.GetLength() + 2;
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼
|
|
|
|
|
|
LPBYTE lpBuffer = (LPBYTE)LocalAlloc(LPTR, file.GetLength() + 2);
|
|
|
|
|
|
lpBuffer[0] = COMMAND_CREATE_FOLDER;
|
|
|
|
|
|
memcpy(lpBuffer + 1, file.GetBuffer(0), nPacketSize - 1);
|
|
|
|
|
|
m_iocpServer->Send(m_pContext, lpBuffer, nPacketSize);
|
2025-01-10 00:21:28 +08:00
|
|
|
|
LocalFree(lpBuffer);
|
2019-01-06 21:18:26 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
void CFileManagerDlg::OnTransfer()
|
|
|
|
|
|
{
|
|
|
|
|
|
// TODO: Add your command handler code here
|
|
|
|
|
|
POINT pt;
|
|
|
|
|
|
GetCursorPos(&pt);
|
|
|
|
|
|
if (GetFocus()->m_hWnd == m_list_local.m_hWnd)
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
OnLocalCopy();
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
OnRemoteCopy();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
void CFileManagerDlg::OnRename()
|
|
|
|
|
|
{
|
|
|
|
|
|
// TODO: Add your command handler code here
|
|
|
|
|
|
POINT pt;
|
|
|
|
|
|
GetCursorPos(&pt);
|
|
|
|
|
|
if (GetFocus()->m_hWnd == m_list_local.m_hWnd)
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
m_list_local.EditLabel(m_list_local.GetSelectionMark());
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
m_list_remote.EditLabel(m_list_remote.GetSelectionMark());
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
void CFileManagerDlg::OnEndlabeleditListLocal(NMHDR* pNMHDR, LRESULT* pResult)
|
|
|
|
|
|
{
|
|
|
|
|
|
LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
|
|
|
|
|
|
// TODO: Add your control notification handler code here
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
|
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
CString str, strExistingFileName, strNewFileName;
|
|
|
|
|
|
m_list_local.GetEditControl()->GetWindowText(str);
|
|
|
|
|
|
|
|
|
|
|
|
strExistingFileName = m_Local_Path + m_list_local.GetItemText(pDispInfo->item.iItem, 0);
|
|
|
|
|
|
strNewFileName = m_Local_Path + str;
|
|
|
|
|
|
*pResult = ::MoveFile(strExistingFileName.GetBuffer(0), strNewFileName.GetBuffer(0));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CFileManagerDlg::OnEndlabeleditListRemote(NMHDR* pNMHDR, LRESULT* pResult)
|
|
|
|
|
|
{
|
|
|
|
|
|
LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
|
|
|
|
|
|
// TODO: Add your control notification handler code here
|
|
|
|
|
|
CString str, strExistingFileName, strNewFileName;
|
|
|
|
|
|
m_list_remote.GetEditControl()->GetWindowText(str);
|
|
|
|
|
|
|
|
|
|
|
|
strExistingFileName = m_Remote_Path + m_list_remote.GetItemText(pDispInfo->item.iItem, 0);
|
|
|
|
|
|
strNewFileName = m_Remote_Path + str;
|
|
|
|
|
|
|
|
|
|
|
|
if (strExistingFileName != strNewFileName)
|
|
|
|
|
|
{
|
|
|
|
|
|
UINT nPacketSize = strExistingFileName.GetLength() + strNewFileName.GetLength() + 3;
|
|
|
|
|
|
LPBYTE lpBuffer = (LPBYTE)LocalAlloc(LPTR, nPacketSize);
|
|
|
|
|
|
lpBuffer[0] = COMMAND_RENAME_FILE;
|
|
|
|
|
|
memcpy(lpBuffer + 1, strExistingFileName.GetBuffer(0), strExistingFileName.GetLength() + 1);
|
|
|
|
|
|
memcpy(lpBuffer + 2 + strExistingFileName.GetLength(),
|
|
|
|
|
|
strNewFileName.GetBuffer(0), strNewFileName.GetLength() + 1);
|
|
|
|
|
|
m_iocpServer->Send(m_pContext, lpBuffer, nPacketSize);
|
|
|
|
|
|
LocalFree(lpBuffer);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
2019-01-06 21:18:26 +08:00
|
|
|
|
*pResult = 1;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
void CFileManagerDlg::OnDelete()
|
|
|
|
|
|
{
|
|
|
|
|
|
// TODO: Add your command handler code here
|
|
|
|
|
|
POINT pt;
|
|
|
|
|
|
GetCursorPos(&pt);
|
|
|
|
|
|
if (GetFocus()->m_hWnd == m_list_local.m_hWnd)
|
|
|
|
|
|
{
|
|
|
|
|
|
OnLocalDelete();
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
OnRemoteDelete();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
void CFileManagerDlg::OnNewfolder()
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
// TODO: Add your command handler code here
|
|
|
|
|
|
POINT pt;
|
|
|
|
|
|
GetCursorPos(&pt);
|
|
|
|
|
|
if (GetFocus()->m_hWnd == m_list_local.m_hWnd)
|
|
|
|
|
|
{
|
|
|
|
|
|
OnLocalNewfolder();
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
OnRemoteNewfolder();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
void CFileManagerDlg::OnRefresh()
|
|
|
|
|
|
{
|
|
|
|
|
|
// TODO: Add your command handler code here
|
|
|
|
|
|
POINT pt;
|
|
|
|
|
|
GetCursorPos(&pt);
|
|
|
|
|
|
if (GetFocus()->m_hWnd == m_list_local.m_hWnd)
|
|
|
|
|
|
{
|
|
|
|
|
|
FixedLocalFileList(".");
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
GetRemoteFileList(".");
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CFileManagerDlg::OnLocalOpen()
|
|
|
|
|
|
{
|
|
|
|
|
|
// TODO: Add your command handler code here
|
|
|
|
|
|
CString str;
|
|
|
|
|
|
str = m_Local_Path + m_list_local.GetItemText(m_list_local.GetSelectionMark(), 0);
|
|
|
|
|
|
ShellExecute(NULL, "open", str, NULL, NULL, SW_SHOW);
|
|
|
|
|
|
}
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
void CFileManagerDlg::OnRemoteOpenShow()
|
|
|
|
|
|
{
|
|
|
|
|
|
// TODO: Add your command handler code here
|
|
|
|
|
|
CString str;
|
|
|
|
|
|
str = m_Remote_Path + m_list_remote.GetItemText(m_list_remote.GetSelectionMark(), 0);
|
|
|
|
|
|
|
|
|
|
|
|
int nPacketLength = str.GetLength() + 2;
|
|
|
|
|
|
LPBYTE lpPacket = (LPBYTE)LocalAlloc(LPTR, nPacketLength);
|
|
|
|
|
|
lpPacket[0] = COMMAND_OPEN_FILE_SHOW;
|
|
|
|
|
|
memcpy(lpPacket + 1, str.GetBuffer(0), nPacketLength - 1);
|
|
|
|
|
|
m_iocpServer->Send(m_pContext, lpPacket, nPacketLength);
|
2025-01-10 00:21:28 +08:00
|
|
|
|
LocalFree(lpPacket);
|
2019-01-06 21:18:26 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CFileManagerDlg::OnRemoteOpenHide()
|
|
|
|
|
|
{
|
|
|
|
|
|
// TODO: Add your command handler code here
|
|
|
|
|
|
CString str;
|
|
|
|
|
|
str = m_Remote_Path + m_list_remote.GetItemText(m_list_remote.GetSelectionMark(), 0);
|
|
|
|
|
|
|
|
|
|
|
|
int nPacketLength = str.GetLength() + 2;
|
|
|
|
|
|
LPBYTE lpPacket = (LPBYTE)LocalAlloc(LPTR, nPacketLength);
|
|
|
|
|
|
lpPacket[0] = COMMAND_OPEN_FILE_HIDE;
|
|
|
|
|
|
memcpy(lpPacket + 1, str.GetBuffer(0), nPacketLength - 1);
|
|
|
|
|
|
m_iocpServer->Send(m_pContext, lpPacket, nPacketLength);
|
2025-01-10 00:21:28 +08:00
|
|
|
|
LocalFree(lpPacket);
|
2019-01-06 21:18:26 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CFileManagerDlg::OnRclickListLocal(NMHDR* pNMHDR, LRESULT* pResult)
|
|
|
|
|
|
{
|
|
|
|
|
|
// TODO: Add your control notification handler code here
|
|
|
|
|
|
CListCtrl *pListCtrl = &m_list_local;
|
|
|
|
|
|
CMenu popup;
|
|
|
|
|
|
popup.LoadMenu(IDR_FILEMANAGER);
|
|
|
|
|
|
CMenu* pM = popup.GetSubMenu(0);
|
|
|
|
|
|
CPoint p;
|
|
|
|
|
|
GetCursorPos(&p);
|
|
|
|
|
|
pM->DeleteMenu(6, MF_BYPOSITION);
|
|
|
|
|
|
if (pListCtrl->GetSelectedCount() == 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
int count = pM->GetMenuItemCount();
|
2019-01-18 17:37:15 +08:00
|
|
|
|
for (int i = 0; i < count; ++i)
|
2019-01-06 21:18:26 +08:00
|
|
|
|
{
|
|
|
|
|
|
pM->EnableMenuItem(i, MF_BYPOSITION | MF_GRAYED);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if (pListCtrl->GetSelectedCount() <= 1)
|
|
|
|
|
|
{
|
|
|
|
|
|
pM->EnableMenuItem(IDM_NEWFOLDER, MF_BYCOMMAND | MF_ENABLED);
|
|
|
|
|
|
}
|
|
|
|
|
|
if (pListCtrl->GetSelectedCount() == 1)
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-01-06 21:18:26 +08:00
|
|
|
|
// <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
|
|
|
|
|
|
if (pListCtrl->GetItemData(pListCtrl->GetSelectionMark()) == 1)
|
|
|
|
|
|
pM->EnableMenuItem(IDM_LOCAL_OPEN, MF_BYCOMMAND | MF_GRAYED);
|
|
|
|
|
|
else
|
|
|
|
|
|
pM->EnableMenuItem(IDM_LOCAL_OPEN, MF_BYCOMMAND | MF_ENABLED);
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
pM->EnableMenuItem(IDM_LOCAL_OPEN, MF_BYCOMMAND | MF_GRAYED);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2019-01-06 21:18:26 +08:00
|
|
|
|
|
|
|
|
|
|
pM->EnableMenuItem(IDM_REFRESH, MF_BYCOMMAND | MF_ENABLED);
|
|
|
|
|
|
pM->TrackPopupMenu(TPM_LEFTALIGN, p.x, p.y, this);
|
|
|
|
|
|
*pResult = 0;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
2019-01-06 21:18:26 +08:00
|
|
|
|
|
|
|
|
|
|
void CFileManagerDlg::OnRclickListRemote(NMHDR* pNMHDR, LRESULT* pResult)
|
|
|
|
|
|
{
|
|
|
|
|
|
// TODO: Add your control notification handler code here
|
|
|
|
|
|
int nRemoteOpenMenuIndex = 5;
|
|
|
|
|
|
CListCtrl *pListCtrl = &m_list_remote;
|
|
|
|
|
|
CMenu popup;
|
|
|
|
|
|
popup.LoadMenu(IDR_FILEMANAGER);
|
|
|
|
|
|
CMenu* pM = popup.GetSubMenu(0);
|
|
|
|
|
|
CPoint p;
|
|
|
|
|
|
GetCursorPos(&p);
|
|
|
|
|
|
pM->DeleteMenu(IDM_LOCAL_OPEN, MF_BYCOMMAND);
|
|
|
|
|
|
if (pListCtrl->GetSelectedCount() == 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
int count = pM->GetMenuItemCount();
|
2019-01-18 17:37:15 +08:00
|
|
|
|
for (int i = 0; i < count; ++i)
|
2019-01-06 21:18:26 +08:00
|
|
|
|
{
|
|
|
|
|
|
pM->EnableMenuItem(i, MF_BYPOSITION | MF_GRAYED);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if (pListCtrl->GetSelectedCount() <= 1)
|
|
|
|
|
|
{
|
|
|
|
|
|
pM->EnableMenuItem(IDM_NEWFOLDER, MF_BYCOMMAND | MF_ENABLED);
|
|
|
|
|
|
}
|
|
|
|
|
|
if (pListCtrl->GetSelectedCount() == 1)
|
|
|
|
|
|
{
|
|
|
|
|
|
// <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
|
|
|
|
|
|
if (pListCtrl->GetItemData(pListCtrl->GetSelectionMark()) == 1)
|
|
|
|
|
|
pM->EnableMenuItem(nRemoteOpenMenuIndex, MF_BYPOSITION| MF_GRAYED);
|
|
|
|
|
|
else
|
|
|
|
|
|
pM->EnableMenuItem(nRemoteOpenMenuIndex, MF_BYPOSITION | MF_ENABLED);
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
pM->EnableMenuItem(nRemoteOpenMenuIndex, MF_BYPOSITION | MF_GRAYED);
|
|
|
|
|
|
|
|
|
|
|
|
pM->EnableMenuItem(IDM_REFRESH, MF_BYCOMMAND | MF_ENABLED);
|
|
|
|
|
|
pM->TrackPopupMenu(TPM_LEFTALIGN, p.x, p.y, this);
|
|
|
|
|
|
*pResult = 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool CFileManagerDlg::MakeSureDirectoryPathExists(LPCTSTR pszDirPath)
|
|
|
|
|
|
{
|
|
|
|
|
|
LPTSTR p, pszDirCopy;
|
|
|
|
|
|
DWORD dwAttributes;
|
|
|
|
|
|
|
|
|
|
|
|
// Make a copy of the string for editing.
|
|
|
|
|
|
|
|
|
|
|
|
__try
|
|
|
|
|
|
{
|
|
|
|
|
|
pszDirCopy = (LPTSTR)malloc(sizeof(TCHAR) * (lstrlen(pszDirPath) + 1));
|
|
|
|
|
|
|
|
|
|
|
|
if(pszDirCopy == NULL)
|
|
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
|
|
|
|
lstrcpy(pszDirCopy, pszDirPath);
|
|
|
|
|
|
|
|
|
|
|
|
p = pszDirCopy;
|
|
|
|
|
|
|
|
|
|
|
|
// If the second character in the path is "\", then this is a UNC
|
|
|
|
|
|
// path, and we should skip forward until we reach the 2nd \ in the path.
|
|
|
|
|
|
|
|
|
|
|
|
if((*p == TEXT('\\')) && (*(p+1) == TEXT('\\')))
|
|
|
|
|
|
{
|
|
|
|
|
|
p++; // Skip over the first \ in the name.
|
|
|
|
|
|
p++; // Skip over the second \ in the name.
|
|
|
|
|
|
|
|
|
|
|
|
// Skip until we hit the first "\" (\\Server\).
|
|
|
|
|
|
|
|
|
|
|
|
while(*p && *p != TEXT('\\'))
|
|
|
|
|
|
{
|
|
|
|
|
|
p = CharNext(p);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Advance over it.
|
|
|
|
|
|
|
|
|
|
|
|
if(*p)
|
|
|
|
|
|
{
|
|
|
|
|
|
p++;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Skip until we hit the second "\" (\\Server\Share\).
|
|
|
|
|
|
|
|
|
|
|
|
while(*p && *p != TEXT('\\'))
|
|
|
|
|
|
{
|
|
|
|
|
|
p = CharNext(p);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Advance over it also.
|
|
|
|
|
|
|
|
|
|
|
|
if(*p)
|
|
|
|
|
|
{
|
|
|
|
|
|
p++;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
else if(*(p+1) == TEXT(':')) // Not a UNC. See if it's <drive>:
|
|
|
|
|
|
{
|
|
|
|
|
|
p++;
|
|
|
|
|
|
p++;
|
|
|
|
|
|
|
|
|
|
|
|
// If it exists, skip over the root specifier
|
|
|
|
|
|
|
|
|
|
|
|
if(*p && (*p == TEXT('\\')))
|
|
|
|
|
|
{
|
|
|
|
|
|
p++;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
while(*p)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(*p == TEXT('\\'))
|
|
|
|
|
|
{
|
|
|
|
|
|
*p = TEXT('\0');
|
|
|
|
|
|
dwAttributes = GetFileAttributes(pszDirCopy);
|
|
|
|
|
|
|
|
|
|
|
|
// Nothing exists with this name. Try to make the directory name and error if unable to.
|
|
|
|
|
|
if(dwAttributes == 0xffffffff)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(!CreateDirectory(pszDirCopy, NULL))
|
|
|
|
|
|
{
|
|
|
|
|
|
if(GetLastError() != ERROR_ALREADY_EXISTS)
|
|
|
|
|
|
{
|
|
|
|
|
|
free(pszDirCopy);
|
|
|
|
|
|
return FALSE;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
if((dwAttributes & FILE_ATTRIBUTE_DIRECTORY) != FILE_ATTRIBUTE_DIRECTORY)
|
|
|
|
|
|
{
|
|
|
|
|
|
// Something exists with this name, but it's not a directory... Error
|
|
|
|
|
|
free(pszDirCopy);
|
|
|
|
|
|
return FALSE;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
*p = TEXT('\\');
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
p = CharNext(p);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
__except(EXCEPTION_EXECUTE_HANDLER)
|
|
|
|
|
|
{
|
|
|
|
|
|
// SetLastError(GetExceptionCode());
|
|
|
|
|
|
free(pszDirCopy);
|
|
|
|
|
|
return FALSE;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
free(pszDirCopy);
|
|
|
|
|
|
return TRUE;
|
2019-01-12 18:21:42 +08:00
|
|
|
|
}
|