FTP客户端-x-x_第1页
FTP客户端-x-x_第2页
FTP客户端-x-x_第3页
FTP客户端-x-x_第4页
FTP客户端-x-x_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.21 、功能需求2、开发环境与工具3、所需要知识21、FTP实现的基本原理( 1)概要( 2)上传和下载(3)用户FTP和匿名FTP(4) ASCII 和 Binary(5)Port 和 Passive2、 WinInet 的中 FTP 的基本操作( 1)头文件( 2)打开连接和关闭( 3) CFtpConnection 的操作函数三、完成进度51 、已完成部分2、未完成部分3、还需改善的部分四、模块化设计五、详细设计 71、CFtpDlg类的一些函数定义 72、CFtpOperate的一些函数定义 22六、测试结果 36七、用户手

2、册 40八、实验总结 41九、附录 41FTP客户端程序一、需求分析1、功能需求(1)实现一个图形用户界面的FTP客户端,保证文件的安全传输和存储。( 2 )提供登录界面,上传下载界面、帮助界面、关于界面。(3)通过输入服务器地址、用户名和密码,可以实现远程FTP主机的登录。(4)提供本地文件和文件夹的上传功能,可对FTP主机文件进行下载和删除文件。(5)提供对本地目录的读取与返回,能正确列出文件和文件夹,在没有登录服务器 前可以作为一个简单的文件查询工具对本地文件进行查询。(6)帮助页面可以对用户提供使用说明。(7)要求开发出的FTP客户端符合标准 FTP协议规范,支持 ASCII传输模式和

3、二进制 数据传输模式(8) FTP的两种工作模式的选择 Port模式(主动)和 Passive模式(被动)2、开发环境与工具使用的编程工具:VC+6.0(2) 使用的语言:C+(3)使用的开发包:使用 MFC WinInet(4)开发平台: Windows 73、所需要知识(1)计算机网络的基本知识(2) 了解FTP基本实现原理(3)使用VC+6.0IDE进彳T MFC§序开发的基本知识(4)熟悉 WinInet中属于FTP部分的操作(5)熟悉文件或文件夹操作(6)熟悉控件的操作,如在 List Ctrol添加图片(浏览文件或文夹的图标)二、知识理解1、FTP实现的基本原理(1)概要

4、Internet 是一个非常复杂的计算机环境,Internet 上的计算机已有上千万台,而这些计算机可能运行不同的操作系统,有运行Unix的服务器,也有运行 Dos、Windows的PC机等等,而各种操作系统之间的文件交流问题,需要建立一个统一的文件传输协议,这就是所谓的FTP。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议,这样用户就可以把自己的文件传送给别人,或者从其它的用户环境中获得文件。FTP也是一个客户端/服务器系统。用户通过一个支持FTP协议的客户端程序,连接到在远程主机上的FTP服务器程序。用户通过客户端程序向服务器程序发出命令,服务器程序执行用户所

5、发出的命令,并将执行的结果返回到客户端。使用FTP时必须首先登录,在远程主机上获得相应的权限以后,方可下载或上传文件。(2)上传和下载"下载"文件就是从远程主机拷贝文件至自己的计算机上;"上彳”文件就是将文件从自己的计算机中拷贝至远程主机上(3)用户FTP和匿名FTP用户FTP:种方式为已在FTP服务器上建立了特定帐号的用户使用,需要合法的 用户名和密码才能登录到远程计算机传输文件。匿名FTP:用户作为“anonymous;登录到FTP服务器,不需要有自己的用户名和 密码。(4) ASCII 和 BinaryASCII:文本传输器使用 ASCII字符,并由回车键和

6、换行符分开Binary:二进制不用转换或格式化就可传字符,二进制模式比文本模式更快,并且可以传输所有ASCII值,所以系统管理员一般将FTP设置成二进制模式。(5)Port 和 PassivePort模式(主动):FTP客户端首先和FTP服务器的TCP 21端口建立连接,通过 这个通道发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。PORT命令包含了客户端用什么端口接收数据。在传 送数据的时候,服务器端通过自己的TCP 20端口连接至客户端的指定端口发送数据。FTP server必须和客户端建立一个新的连接用来传送数据。Passive模式(被动):Passive模式在建立控制通

7、道的时候和Standard模式类似,但建立连接后发送的不是Port命令,而是Pasv命令。FTP服务器收到Pasv命令后,随机打开一个高端端口(端口号大于1024)并且通知客户端在这个端口上传送数据的请求,客户端连接 FTP服务 器此端口,然后FTP服务器将通过这个端口进行数据的传送,这个时候FTP server不再需要建立一个新的和客户端之间的连接。2、WinInet的中FTP的基本操作(1)头文件:#include <afxinet.h>(2)打开连接和关闭:必须先创建一个 CInternetSession 实例,然后创建 CFtpConnection 对 象。创建 CFtpC

8、onnection 对象不采用直接方式,而是调用 CInternetSession:GetFtpConnertion来创建并返回一个指向它的指针。示例>CInternetSession *pInternetSession;CFtpConnection *pFtpConnection;pInternetSession=newCInternetSession ();pFtpConnection = pInternetSession->GetFtpConnection( );/使用结束后需要关闭pFtpConnection->Close();if(pFtpConnection !=

9、 NULL) delete pFtpConnection;pInternetSession->Close();if(pInternetSession != NULL)delete pInternetSession;(3) CFtpConnection的操作函数SetCurrentDirectory设置当前FTP目录GetCurrentDirectory狄取此次连接的当前目录GetCurrentDirectoryAsURL获取彳乍为URL的此次连接的当前目录RemoveDirectory从服务器移去指定目录CreateDirectory在服务器上构造一个目录Rename将服务器上的文件改名

10、Remove从服务器上移去一个文件PutFile将一个文件放到服务器上GetFile从连接的服务器上状取一个文件OpenFile在连接的服务器上打心个文件Close关闭与服务器的连接三、完成进度1、已完成部分(1)实现一个图形用户界面的FTP客户端,保证文件的安全传输和存储。(2)提供登录界面,上传下载界面、帮助界面、关于界面(3)通过输入服务器地址、用户名和密码,可以实现远程FTP主机的登录。(4)提供本地文件上传功能,可对FTP主机文件进行下载和删除文件。(5)提供对本地目录的读取与返回,能正确列出文件和文件夹,在没有登录服务器前可以作为一个简单的文件查询工具对本地文件进行查询。(6)帮助

11、页面可以对用户提供使用说明。(7)支持ASCII传输模式和二进制数据传输模式,外加自动选择的模式(8) FTP的两种工作模式的选择 Port模式(主动)和 Passive模式(被动)(9)提供用户操作的状态信息输出2、未完成部分只提供了本地文件的上传功能,暂时不能提供文件夹的上传功能, 由于当初没有使用多线程对服务器端进行操作,若上传或下载的文件过 大,会导致界面陷入长时间的不响应中。3、还需改善的部分(1)使用多线程进行操作(2)提供文件夹上传和文件夹下载功能(3)改进界面,提供更方便的操作(4)增加上传和下载的队列(5)同时可连接多个 FTP服务器(6)改善提示信息(7)账户。密码等用户资

12、料在本地加密后保存(8)增加更多的功能,如下载完成后关机等3文档来源为:从网络收集整理.word版本可编辑.文档来源为 :从网络收集整理.word 版本可编辑.欢迎下载支持四、模块化设计五、详细设计( 1) CFtpDlg 类的一些函数定义/ 初始化BOOL CFtpDlg:OnInitDialog() CDialog:OnInitDialog();/ Add "About." menu item to system menu./ IDM_ABOUTBOX must be in the system command range. ASSERT(IDM_ABOUTBOX &a

13、mp; 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL) CString strAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if (!strAboutMenu.IsEmpty() pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strA

14、boutMenu); / Set the icon for this dialog. The framework does this automatically/ when the application's main window is not a dialogSetIcon(m_hIcon, TRUE);/ Set big iconSetIcon(m_hIcon, FALSE);/ Set small iconm_ctrBinary.SetCheck(1);m_ctrActive.SetCheck(1);m_editPort.SetWindowText("21"

15、);bBinary1 = 1; / 使用二进制bPassive1 = 0; / 使用主动myPort = 21;m_imgList.Create(20,20,ILC_COLOR32,0,0); / 创建图像列表m_imgList.SetBkColor(RGB(255,255,255);/ 文件夹图标hIconFold = :LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_FOLDER); / 文件图标hIconFile = :LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_FILE)

16、;m_imgList.Add(hIconFold);m_imgList.Add(hIconFile);m_ctrlLocalFile.SetImageList(&m_imgList,LVSIL_SMALL); /关联m_ctrlServerFile.SetImageList(&m_imgList,LVSIL_SMALL); /关联m_editServer.SetWindowText(".cn");m_editName.SetWindowText("ngpxbbs");m_editPassword.SetWindowText("g

17、dutngpxbbs");m_btnCon.EnableWindow(TRUE);m_btnClo.EnableWindow(FALSE);m_ctrlLocalFile.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);m_ctrlServerFile.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);m_ctrlLocalFile.InsertColumn(0," m_ctrlLocalFile.InsertColumn(1," m_ct

18、rlLocalFile.InsertColumn(2,"m_ctrlServerFile.InsertColumn(0, m_ctrlServerFile.InsertColumn(1," m_ctrlServerFile.InsertColumn(2,"文件名 ",LVCFMT_LEFT,140,0);/ 设置列文件类型",LVCFMT_LEFT,100,1);修改日期",LVCFMT_LEFT,100,2);文件名",LVCFMT_LEFT,140,0);/设置列文件类型",LVCFMT_LEFT,100,1)

19、;修改日期",LVCFMT_LEFT,100,2);/ 添加硬盘盘符size_t szAllDriveStrings=:GetLogicalDriveStrings(0,NULL);TCHAR *pDriveStrings=new TCHARszAllDriveStrings+sizeof(_T(" ");GetLogicalDriveStrings(szAllDriveStrings,pDriveStrings);size_t szDriveString=:strlen(pDriveStrings);while(szDriveString>0)m_ctrl

20、Local.AddString(pDriveStrings);pDriveStrings+=szDriveString+1;szDriveString=:strlen(pDriveStrings);int index = m_ctrlLocal.FindString(0,"c:");m_ctrlLocal.SetCurSel(index);m_strLocPath = "c:" / 初始化为 c 盘ListLocFile();cFtpOpr.setEidt(&m_ediMessage);return TRUE; / return TRUE unl

21、ess you set the focus to a controlvoid CFtpDlg:OnSysCommand(UINT nID, LPARAM lParam)if (nID & 0xFFF0) = IDM_ABOUTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal();elseCDialog:OnSysCommand(nID, lParam);/ If you add a minimize button to your dialog, you will need the code below / to draw the icon. For MFC

22、 applications using the document/view model, / this is automatically done for you by the framework.void CFtpDlg:OnPaint()if (IsIconic()CPaintDC dc(this); / device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);/ Center icon in client rectangleint cxIcon = GetSystemMe

23、trics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;/ Draw the icondc.DrawIcon(x, y, m_hIcon);elseCDialog:OnPaint();/ The system calls this to obtain the cursor to display while

24、 the user drags / the minimized window.HCURSOR CFtpDlg:OnQueryDragIcon()return (HCURSOR) m_hIcon;/ 连接服务器void CFtpDlg:OnBtnConnect()/ TODO: Add your control notification handler code herem_editServer.GetWindowText(m_strServer); /记录 FTP服务器地址CString strtemp;m_editPort.GetWindowText(strtemp);myPort = :a

25、toi(strtemp); /获得设置的端口号int i;if (bAnony = 0)/ 不使用匿名m_editName.GetWindowText(m_strName); /记录 FTP登陆用户名m_editPassword.GetWindowText(m_strPassword); /记录 FTP登陆用户密码i = cFtpOpr.set(m_strServer,m_strName,m_strPassword); else/ 使用匿名CString strNameTemp;m_editName.GetWindowText(strNameTemp); / 匿名登陆的用户名 i = cFtp

26、Opr.set(m_strServer,strNameTemp,""); if (i)/ 设置成功,打开连接if (cFtpOpr.OpenConnection() / 连接成功 m_btnClo.EnableWindow(TRUE);m_btnCon.EnableWindow(FALSE); UpdateServerFile();/ 更新服务器的文件显示 m_ctrlServer.ResetContent(); CString temp;cFtpOpr.GetPath(temp);m_ctrlServer.AddString(LPSTR)(LPCTSTR)temp);m_

27、ctrlServer.SetCurSel(0);m_chkAnony.EnableWindow(FALSE); m_ctrActive.EnableWindow(FALSE);CButton *temp2 =(CButton*)GetDlgItem(IDC_PASSIVE);temp2->EnableWindow(FALSE); m_editPort.EnableWindow(FALSE);else/ 连接失败void CFtpDlg:OnBtnClose()/ TODO: Add your control notification handler code here/ 关闭连接if (

28、cFtpOpr.CloseConnection() / 关闭成功 m_btnClo.EnableWindow(FALSE);m_btnCon.EnableWindow(TRUE); m_ctrlServerFile.DeleteAllItems();m_ctrlServer.ResetContent();m_ctrActive.EnableWindow(TRUE);CButton *temp2 =(CButton*)GetDlgItem(IDC_PASSIVE);temp2->EnableWindow(TRUE);m_editPort.EnableWindow(TRUE);m_chkAn

29、ony.EnableWindow(TRUE);/ 双击本地文件列表控件中的选项void CFtpDlg:OnDblclkListLocalfile(NMHDR* pNMHDR, LRESULT* pResult)/ TODO: Add your control notification handler code here POSITION p=m_ctrlLocalFile.GetFirstSelectedItemPosition();if (p = NULL)return;/ 获取刚选取的位置的下标( 从 0 开始的 )int index = m_ctrlLocalFile.GetNextS

30、electedItem(p);/ 获得选中的内容/ 得到第 index 行. 第 0列的内容 (下标从 0开始 )CString FirstColumn=m_ctrlLocalFile.GetItemText(index,0);CString SecondColumn = m_ctrlLocalFile.GetItemText(index,1);if (index = 0) / 返回上层目录 int k = m_strLocPath.GetLength() - 1;if (m_strLocPath.Right(2) = ":")return;/ 删除当层的项目int ix

31、= m_ctrlLocal.FindString(0,m_strLocPath);if (ix != CB_ERR)m_ctrlLocal.DeleteString(ix);for (int j = k -1; j >= 2;-j)if (m_strLocPath.GetAt(j) = '')m_strLocPath = m_strLocPath.Left(j+1); break;ListLocFile();*pResult = 0; return;if (SecondColumn=" 文件夹 ") CString strTemp = FirstCol

32、umn;m_strLocPath += strTemp + ''ListLocFile(); /更新本地磁盘文件显示 else if (SecondColumn=" 文件 ") / 点到的是文件,进行上传if (cFtpOpr.ReStatus()=2) cFtpOpr.PutFtpFile(m_strLocPath + FirstColumn,FirstColumn); UpdateServerFile();/ 更新服务器的文件显示 *pResult = 0; void CFtpDlg:OnDblclkListServerfile(NMHDR* pNMHD

33、R, LRESULT* pResult) / TODO: Add your control notification handler code here / 获取选中的的一个位置POSITION p=m_ctrlServerFile.GetFirstSelectedItemPosition();if (p = NULL) return;/ 获取刚选取的位置的下标( 从 0 开始的 )int index = m_ctrlServerFile.GetNextSelectedItem(p);/ 获得选中的内容/ 得到第 index 行. 第 0列的内容 (下标从 0开始 )CString First

34、Column=m_ctrlServerFile.GetItemText(index,0);CString SecondColumn = m_ctrlServerFile.GetItemText(index,1); CStringArray ServName;int nFileNumber=0;if (index = 0) / 返回上层目录 if (cFtpOpr.setBackPath() = 0) *pResult = 0; return;9文档来源为:从网络收集整理.word 版本可编辑.文档来源为 :从网络收集整理.word 版本可编辑.欢迎下载支持UpdateServerFile();

35、/更新服务器的文件显示CString temp;m_ctrlServer.ResetContent();cFtpOpr.GetPath(temp);m_ctrlServer.AddString(LPSTR)(LPCTSTR)temp);m_ctrlServer.SetCurSel(0);*pResult = 0;return;/ if (FirstColumn.GetAt(i) ='>' && FirstColumn.GetAt(i-1) = 'R'&& FirstColumn.GetAt(i-2) = 'I'

36、;&&/ FirstColumn.GetAt(i-3) = 'D'&& FirstColumn.GetAt(i-4) = '<')if (SecondColumn=" 文件夹 ")if (cFtpOpr.setNextPath(FirstColumn) = 0)*pResult = 0;return;UpdateServerFile();/ 更新服务器的文件显示CString temp;m_ctrlServer.ResetContent();cFtpOpr.GetPath(temp);m_ctrlServ

37、er.AddString(LPSTR)(LPCTSTR)temp);m_ctrlServer.SetCurSel(0);else if (SecondColumn=" 文件 ")/ 点到的是文件,进行下载cFtpOpr.GetFtpFile(FirstColumn,m_strLocPath);ListLocFile();*pResult = 0;/ 将本地文件列表出来void CFtpDlg:ListLocFile()m_ctrlLocalFile.DeleteAllItems();int ix = m_ctrlLocal.FindString(0,m_strLocPath

38、);if (ix = CB_ERR)int iy = m_ctrlLocal.GetCount();m_ctrlLocal.SetCurSel(m_ctrlLocal.AddString(m_strLocPath);elsem_ctrlLocal.SetCurSel(m_ctrlLocal.SetCurSel(ix);int k = 0;m_ctrlLocalFile.InsertItem(0,".上层目录 ");char * lpPath = (LPSTR)(LPCTSTR)m_strLocPath;char szFind300;WIN32_FIND_DATA FindF

39、ileData;strcpy(szFind,lpPath);strcat(szFind,"*.*");HANDLE hFind=:FindFirstFile(szFind,&FindFileData);/if(INVALID_HANDLE_VALUE=hFind)/return;while(TRUE)if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)CString str = FindFileData.cFileName;if (str != '.' &&

40、str != ".") /str += "<DIR>"LVITEM lvitem;lvitem.mask = LVIF_IMAGE|LVIF_TEXT;lvitem.iItem = k+1;lvitem.pszText = (LPSTR)(LPCTSTR)str;lvitem.iImage = 0;lvitem.iSubItem =0;m_ctrlLocalFile.InsertItem(&lvitem);/m_ctrlLocalFile.InsertItem(k+1,str);/插入行m_ctrlLocalFile.SetItemT

41、ext(k+1,1," 文件夹 "); +k; else/ 文件LVITEM lvitem;lvitem.mask = LVIF_IMAGE|LVIF_TEXT;lvitem.iItem = k+1;lvitem.pszText = FindFileData.cFileName;lvitem.iImage = 1;lvitem.iSubItem = 0;m_ctrlLocalFile.InsertItem(&lvitem);/m_ctrlLocalFile.InsertItem(k+1,);/插入行m_ctrlLocalFile.SetItemText(k+1,1,

42、" 文件 ");+k;if(!FindNextFile(hFind,&FindFileData)break;FindClose(hFind);/ 选择了本地文件的组合框中的不同项目void CFtpDlg:OnSelchangeComboboxexLocal()/ TODO: Add your control notification handler code herem_ctrlLocal.SetCurSel(m_ctrlLocal.GetCurSel();m_ctrlLocal.GetWindowText(m_strLocPath);m_ctrlLocal.Re

43、setContent();/ 添加硬盘盘符size_t szAllDriveStrings=:GetLogicalDriveStrings(0,NULL);TCHAR *pDriveStrings=new TCHARszAllDriveStrings+sizeof(_T(" ");GetLogicalDriveStrings(szAllDriveStrings,pDriveStrings);size_t szDriveString=:strlen(pDriveStrings);while(szDriveString>0)m_ctrlLocal.AddString(pD

44、riveStrings);pDriveStrings+=szDriveString+1;szDriveString=:strlen(pDriveStrings);ListLocFile();/ 点击了 ASCII 单选按钮void CFtpDlg:OnAscii()/ TODO: Add your control notification handler code here bBinary1 = 0;/ 点击了二进制单选按钮void CFtpDlg:OnBinary()/ TODO: Add your control notification handler code here bBinary

45、1 = 1; / 使用二进制/ 自动选择二进制或ASCII 单选按钮void CFtpDlg:OnAuto()/ TODO: Add your control notification handler code here bBinary1 = 2; / 自动/ 主动方式单选按钮void CFtpDlg:OnActive()/ TODO: Add your control notification handler code here bPassive1 = 0;/ 被动方式单选按钮void CFtpDlg:OnPassive()/ TODO: Add your control notificat

46、ion handler code here bPassive1 = 1;/ 上传void CFtpDlg:OnBtnup()/ TODO: Add your control notification handler code herePOSITION p=m_ctrlLocalFile.GetFirstSelectedItemPosition();if (p = NULL)return;/ 获取刚选取的位置的下标( 从 0 开始的 )int index = m_ctrlLocalFile.GetNextSelectedItem(p);/ 获得选中的内容/ 得到第 index 行. 第 0列的内

47、容 (下标从 0开始 )CString FirstColumn=m_ctrlLocalFile.GetItemText(index,0);CString SecondColumn = m_ctrlLocalFile.GetItemText(index,1);if (SecondColumn=" 文件夹 ")CTime CurrentTime=CTime:GetCurrentTime();CString strTime;strTime.Format("%d/%d/%d %d:%d:%d",CurrentTime.GetYear(),CurrentTime.

48、GetMonth(),CurrentTime.GetDay(),CurrentTime.GetHour(),CurrentTime.GetMinute(),CurrentTime.GetSecond();strTime += " 暂不支持上传文件夹!rn"int nLength = m_ediMessage.SendMessage(WM_GETTEXTLENGTH);m_ediMessage.SetSel(nLength, nLength);m_ediMessage.ReplaceSel(strTime);return; else if (SecondColumn=&quo

49、t; 文件 ") / 点到的是文件,进行上传if (cFtpOpr.ReStatus()=2) cFtpOpr.PutFtpFile(m_strLocPath + FirstColumn,FirstColumn);UpdateServerFile();/更新服务器的文件显示 / 下载 void CFtpDlg:OnBtndown() / TODO: Add your control notification handler code here POSITION p=m_ctrlServerFile.GetFirstSelectedItemPosition(); if (p = NUL

50、L) return;/ 获取刚选取的位置的下标( 从 0 开始的 )int index = m_ctrlServerFile.GetNextSelectedItem(p); / 获得选中的内容/ 得到第 index 行. 第 0列的内容 (下标从 0开始 )CString FirstColumn=m_ctrlServerFile.GetItemText(index,0);CString SecondColumn = m_ctrlServerFile.GetItemText(index,1); if (SecondColumn=" 文件夹 ") CTime CurrentTi

51、me=CTime:GetCurrentTime();CString strTime;strTime.Format("%d/%d/%d %d:%d:%d ",CurrentTime.GetYear(),CurrentTime.GetMonth(), CurrentTime.GetDay(),CurrentTime.GetHour(), CurrentTime.GetMinute(),CurrentTime.GetSecond(); strTime += " 暂不支持下载文件夹!rn"int nLength = m_ediMessage.SendMessag

52、e(WM_GETTEXTLENGTH); m_ediMessage.SetSel(nLength, nLength); m_ediMessage.ReplaceSel(strTime); return; else if (SecondColumn=" 文件 ") / 点到的是文件,进行下载if (cFtpOpr.ReStatus()=2)/ 点到的是文件,进行下载cFtpOpr.GetFtpFile(FirstColumn,m_strLocPath); ListLocFile(); / 下载完成后更新本地文件显示/ 删除服务器文件或文件夹void CFtpDlg:OnBtn

53、del()/ TODO: Add your control notification handler code herePOSITION p=m_ctrlServerFile.GetFirstSelectedItemPosition(); if (p = NULL)return;/ 获取刚选取的位置的下标( 从 0 开始的 )int index = m_ctrlServerFile.GetNextSelectedItem(p);/ 获得选中的内容/ 得到第 index 行. 第 0列的内容 (下标从 0开始 )CString FirstColumn=m_ctrlServerFile.GetIt

54、emText(index,0);CString SecondColumn = m_ctrlServerFile.GetItemText(index,1); if (SecondColumn=" 文件夹 ")if (cFtpOpr.ReStatus()=2)/ 移除文件夹cFtpOpr.DeleteFTPf(FirstColumn,0);UpdateServerFile();/ 更新服务器的文件显示return;else if (SecondColumn=" 文件 ")if (cFtpOpr.ReStatus()=2)/ 移除文件cFtpOpr.Delet

55、eFTPf(FirstColumn,1);UpdateServerFile();/ 更新服务器的文件显示void CFtpDlg:UpdateServerFile()/更新服务器的文件显示/ 获得目录 CStringArray localName; int nFileNumber=0;nFileNumber=cFtpOpr.GetMultipleFileName(&localName);m_ctrlServerFile.DeleteAllItems();m_ctrlServerFile.InsertItem(0,".上层目录 ");for(int test=0;te

56、st<nFileNumber;test+)CString stTemp = localName.GetAt(test);if (stTemp.Right(5) = "<DIR>")/ 文件夹LVITEM lvitem;CString str = stTemp.Left(stTemp.GetLength() - 5);lvitem.mask = LVIF_IMAGE|LVIF_TEXT;lvitem.iItem =test+1;lvitem.pszText = (LPSTR)(LPCTSTR)str;lvitem.iImage = 0;lvitem.iSubItem =0;m_ctrlServerFile.InsertItem(&lvitem);m_ctrlS

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论