📄 myftpclientdlg.cpp
字号:
FILE_FTP_INFO* pInfo=new FILE_FTP_INFO;
CFileFind fileFind;
UINT i=0;
CTime time;
BOOL bContinue;
::SetCurrentDirectory(szLocDirectory);
::PostMessage(this->m_hWnd ,WM_SETDIRECTORYDISPLAY,0,0);
bContinue=fileFind.FindFile("*.*");
CString str;
while(bContinue)
{
bContinue=fileFind.FindNextFile();
if(fileFind.IsHidden())continue;
str=fileFind.GetFileName();
strcpy(pInfo->szFileName,str);
fileFind.GetLastWriteTime(time);
str=time.Format("%x");
strcpy(pInfo->szFileDate,str);
if(fileFind.IsDirectory())
{
strcpy(pInfo->szFileSize,"");
pInfo->nType=DIRECTORYICON;
::SendMessage(this->m_hWnd,WM_SETFILE,(WPARAM)pInfo,
(LPARAM)LOCFILE);
}
else
{
int i=fileFind.GetLength();
if(i>1024)
{
str.Format("%d",i/1024);
str+="KB";
}
else
str.Format("%d",i);
strcpy(pInfo->szFileSize,str);
pInfo->nType=FILEICON;
::SendMessage(this->m_hWnd,WM_SETFILE,(WPARAM)pInfo,
(LPARAM)LOCFILE);
}
}
::SendMessage(this->m_hWnd,WM_SETREDRAWFLAG,0,0);
delete pInfo;
fileFind.Close();
//return 0L;
}
LRESULT CMyFTPClientDlg::OnSetLocRedrawFlag(WPARAM wParam,LPARAM lParam)
{
if(m_bHaveDotFlag)
{
CString str="..";
int iIcon=DIRECTORYICON;
m_ctrlLocalFile.InsertItem(0,str,iIcon);
m_ctrlLocalFile.SetItemData(0,DIRECTORYICON);
m_bHaveDotFlag=FALSE;
}
m_ctrlLocalFile.Invalidate();
m_ctrlLocalFile.SetRedraw();
return 0L;
}
LRESULT CMyFTPClientDlg::OnSetLocDirectoryDisplay(WPARAM wParam,LPARAM lParam)
{
CString str;
str=szLocDirectory;
m_ctrlLocal.SetWindowText(str);
m_ctrlLocal.Invalidate();
return 0L;
}
LRESULT CMyFTPClientDlg::OnReDisplayLocFile(WPARAM wParam,LPARAM lParam)
{
CString str=(LPCTSTR)wParam;
m_ctrlLocal.SetWindowText(str);
m_ctrlLocal.Invalidate();
GetLocCurrentDirectory();
if(!BeginFindLocFile())
AfxMessageBox("建立网络线程失败");
return 0L;
}
LRESULT CMyFTPClientDlg::OnInsertLocFile(WPARAM wParam,LPARAM lParam)
{
FILE_FTP_INFO* pInfo=(FILE_FTP_INFO*)wParam;
CString str=pInfo->szFileName;
if(str=="."||str=="..")
{
m_bHaveDotFlag=TRUE;
return 0L;
}
OnInsertFile(&m_ctrlLocalFile,pInfo,lParam);
return 0L;
}
LRESULT CMyFTPClientDlg::OnSetLocDir(WPARAM wParam,LPARAM lParam)
{
CString str=(LPCTSTR)lParam;
m_ctrlLocal.SetWindowText(str);
m_ctrlLocalFile.SetRedraw(FALSE);
m_ctrlLocalFile.DeleteAllItems();
m_ctrlLocalFile.SetRedraw();
return 0L;
}
void CMyFTPClientDlg::OnInsertFile(CListCtrl* pListCtrl,LPVOID pIn,LPARAM lParam)
{
FILE_FTP_INFO*pInfo=(FILE_FTP_INFO*)pIn;
LVITEM lvIt;
int iIcon,nItem;
if(pInfo->nType==DIRECTORYICON)
nItem=0;
else
nItem=pListCtrl->GetItemCount();
CString fileName=pInfo->szFileName;;
if((int)lParam==LOCFILE)
GetFileIcon(fileName,&iIcon);
else
iIcon=pInfo->nType;
lvIt.mask=LVIF_TEXT|LVIF_IMAGE|LVIF_PARAM;
lvIt.iImage=iIcon;
lvIt.lParam=pInfo->nType;
lvIt.pszText=pInfo->szFileName;
lvIt.iSubItem=0;
lvIt.iItem=nItem;
int iPos=pListCtrl->InsertItem(&lvIt);
lvIt.mask=LVIF_TEXT;
lvIt.iItem=iPos;
lvIt.pszText=pInfo->szFileDate;
lvIt.iSubItem=1;
pListCtrl->SetItem(&lvIt);
//m_ctrlLocalFile.SetItem(&lvIt);
lvIt.pszText=pInfo->szFileSize;
lvIt.iSubItem=2;
pListCtrl->SetItem(&lvIt);
//IsFree=TRUE;
}
void CMyFTPClientDlg::OnDblclkListLocalfile(NMHDR* pNMHDR, LRESULT* pResult)
{
NMLVDISPINFO* pLocInfo=(NMLVDISPINFO*)pNMHDR;
CString str,str1,filename,buf;
int iIcon,iIconSel;
str.Format("%d",pLocInfo->item);
if(str=="-1")
return;
int nItem=atoi(str);
DWORD dwFlag=m_ctrlLocalFile.GetItemData(nItem);
if(dwFlag==FILEICON)
{
//OnLocFileOpen();
str=szLocDirectory;
m_ctrlLocalFile.GetItemText(nItem,0,szLocDirectory,MAX_PATH);
str1=szLocDirectory;
filename=str1;
if (str.Right(1)!="\\")
str1=str+"\\"+str1;
else
str1=str+str1;
strcpy(szLocDirectory,str);
MessageBox("你要上载文件:"+str1);
UpdateData(true);
UpLoadFile(str1,filename,m_PASV,false);
return;
}
::GetCurrentDirectory(MAX_PATH,szLocDirectory);
str=szLocDirectory;
m_ctrlLocalFile.GetItemText(nItem,0,szLocDirectory,MAX_PATH);
buf=szLocDirectory;
if(str.Right(1)!="\\")
str+="\\";
str+=szLocDirectory;
GetFileIcon(buf,&iIcon,&iIconSel);
int i=InsertLocDir(str,iIcon,iIconSel);
m_ctrlLocal.SetCurSel(i);
::SetCurrentDirectory(str);
::GetCurrentDirectory(MAX_PATH,szLocDirectory);
BeginFindLocFile();
*pResult = 0;
}
void CMyFTPClientDlg::OnSelchangeComboboxexLocal()
{
CString str;
char lpBuffer[MAX_PATH];
::GetCurrentDirectory(MAX_PATH,lpBuffer);
int i=m_ctrlLocal.GetCurSel();
m_ctrlLocal.GetLBText(i,(LPTSTR)(LPCTSTR)str);
i=0;
while(1)
{
if(!SetCurrentDirectory(str))
{
i++;
if(i<2)
{
AfxMessageBox("请插入磁盘再试");
continue;
}
str=lpBuffer;
if((i=m_ctrlLocal.FindStringExact(-1,str))!=-1)
m_ctrlLocal.SetCurSel(i);
else
m_ctrlLocal.SetWindowText(str);
}
else
{
::SetCurrentDirectory(str);
GetLocCurrentDirectory();
BeginFindLocFile();
}
break;
}
}
void CMyFTPClientDlg::SetServerDir (CString& str)
{
m_ctrlServer.SetWindowText(str);
m_ctrlServer.Invalidate();
}
void CMyFTPClientDlg::AddLine(CString strLine)
{
CListItem* pItem = new CListItem();
if(!pItem->ParseLine(strLine)){
delete pItem;
return;
}
AddItem(pItem);
}
BOOL CMyFTPClientDlg::AddItem(CListItem *pItem)
{
//CListCtrl& list= GetListCtrl();
// look for a match on the file name....
// LVITEM lvfi;
LV_ITEM lvi;
lvi.lParam = (LPARAM)pItem;
lvi.iImage = pItem->GetImage();
lvi.mask = LVIF_TEXT|LVIF_IMAGE|LVIF_PARAM;
int ndx = m_ctrlServerFile.GetItemCount ();
lvi.pszText = pItem->m_strName.GetBuffer(0);
pItem->m_strName.ReleaseBuffer();
lvi.iItem = ndx;
lvi.iSubItem = 0;
ndx=m_ctrlServerFile.InsertItem( &lvi );
lvi.mask =LVIF_TEXT;
lvi.pszText = pItem->m_strDate.GetBuffer(0);
pItem->m_strDate.ReleaseBuffer();
lvi.iItem = ndx;
lvi.iSubItem = 1;
m_ctrlServerFile.SetItem( &lvi );
lvi.pszText = pItem->m_strSec.GetBuffer(0);
pItem->m_strSec.ReleaseBuffer();
lvi.iItem = ndx;
lvi.iSubItem = 2;
m_ctrlServerFile.SetItem( &lvi );
if (pItem->GetImage()==7)
m_ctrlServerFile.SetItemData(ndx,DIRECTORYICON);
else
m_ctrlServerFile.SetItemData(ndx,FILEICON);
return (pItem != NULL);
}
void CMyFTPClientDlg::OnDblclkListServerfile(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
NMLVDISPINFO* pLocInfo=(NMLVDISPINFO*)pNMHDR;
CString str,tempstr,tempstr2,buf;
int pos1=0;
str.Format("%d",pLocInfo->item);
if(str=="-1")
return;
int nItem=atoi(str);
DWORD dwFlag=m_ctrlServerFile.GetItemData(nItem);
tempstr2=m_ctrlServerFile.GetItemText(nItem,0);
if(dwFlag==FILEICON)
{
str=szFtpDirectory;
if (str.Right (1)!="/")
str+="/"+tempstr2;
else
str+=tempstr2;
DownLoadFile(str,tempstr2,m_PASV,true);
return;
}
str=szFtpDirectory;
tempstr=szFtpDirectory;
if(str.Right (1)!="/")
str+="/";
str+=m_ctrlServerFile.GetItemText(nItem,0);
tempstr2=m_ctrlServerFile.GetItemText(nItem,0);
if(!tempstr2.CompareNoCase(".."))
{
if (tempstr=="/")
return;
else
{
m_ctrlServerFile.DeleteAllItems ();
Back();
pos1=tempstr.GetLength ()-1;
while (pos1>=0)
{ if (tempstr.Mid (pos1,1)!="/")
{
pos1--;
}
else
{
str=tempstr.Mid (0,pos1+1);
break;
}
}
strcpy(szFtpDirectory,str);
SetServerDir(str);
}
}
else
{
m_ctrlServerFile.DeleteAllItems ();
CD(str);
strcpy(szFtpDirectory,str);
SetServerDir(str);
}
*pResult = 0;
}
void CMyFTPClientDlg::CD(CString dir)
{
int ndx=0;
dir.TrimLeft();
dir.TrimRight();
CString cmd = "CWD " + dir;// + "\r\n";
ftp.FTPcommand(cmd);
ftp.FTPcommand("PWD");
ftp.List();
while(ftp.GetLine(ndx))
{
UpdateData(false);
AddLine(ftp.m_strLine );
}
ftp.FTPcommand("");
}
void CMyFTPClientDlg::Back()
{
int ndx=0;
ftp.FTPcommand("CDUP");
ftp.List();
while(ftp.GetLine(ndx))
{
UpdateData(false);
AddLine(ftp.m_strLine );
}
ftp.FTPcommand("");
}
void CMyFTPClientDlg::UpLoadFile(CString LocalFilePath,CString LocalFileName,bool pasv,bool get)
{
CString str;
str=szFtpDirectory;
if (str.Right(1)!="/")
str+="/"+LocalFileName;
else
str+=LocalFileName;
ftp.MoveFile (str,LocalFilePath,pasv,get);
}
void CMyFTPClientDlg::DownLoadFile(CString ServerFilePath,CString ServerFileName,bool pasv,bool get)
{
CString str;
str=szLocDirectory;
if (str.Right(1)!="\\")
str+="\\"+ServerFileName;
else
str+=ServerFileName;
ftp.MoveFile (ServerFilePath,str,pasv,get);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -